gpt4 book ai didi

google-chrome - `pushManager.subscribe` 和 `pushManager.getSubscription` Service Worker 有什么区别

转载 作者:行者123 更新时间:2023-12-03 18:27:21 37 4
gpt4 key购买 nike

PushManager.getSubscription()

Retrieves an existing push subscription. It returns a Promise that resolves to a PushSubscription object containing details of an existing subscription. If no existing subscription exists, this resolves to a null value.


[...]

PushManager.subscribe()

Subscribes to a push service. It returns a Promise that resolves to a PushSubscription object containing details of a push subscription. A new push subscription is created if the current service worker does not have an existing subscription.


根据 MDN 的 pushManager文档。除了在 getSubcription() 的情况下,方法几乎相同。它可以用空值解析。
我基本上明白我可以简单地使用 subscribe() Service Worker 将尝试在订阅可用时获取订阅,并在订阅不可用时创建新订阅。
=> 但我正在尝试做其他事情。我想先尝试订阅,如果它解决了 null我会尝试订阅它。
    navigator.serviceWorker.register('./worker.js')
.then(function(reg) {

// Subscribe push manager
reg.pushManager.getSubscription()
.then(function(subscription) {

if(subscription){
// TODO... get the enpoint here
} else {
reg.pushManager.subscribe()
.then(function(sub){
// TODO... get the endpoint here
});
}

}, function(error) {
console.error(error);
})
});
但后来我得到了错误:

Uncaught (in promise) DOMException: Subscription failed - no active Service Worker


这令人困惑,我怀疑这是 Chrome 对 Service Worker 的 Push API 的限制,或者可能是一个错误。有没有人有关于这种奇怪行为的任何信息?

最佳答案

问题是您的 Service Worker 已注册,但尚未激活。

您可以使用 navigator.serviceWorker.ready而不是在注册服务 worker 后立即订阅。

如果想让service worker尽快活跃起来,可以使用skipWaitingClients.claim ,如 this ServiceWorker Cookbook recipe 中所述.

关于google-chrome - `pushManager.subscribe` 和 `pushManager.getSubscription` Service Worker 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641170/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com