serviceworker 第一次没有加载
serviceworker does not load the first time
if ('serviceWorker' in navigator) {
console.log('Service Worker is supported');
navigator.serviceWorker.register('sw.js').then(function(reg) {
console.log(reg);
reg.pushManager.subscribe({
userVisibleOnly: true
}).then(function(sub) {
var endpoint = sub.endpoint;
console.log('endpoint:', sub.endpoint);
});
}).catch(function(err) {
console.log(':(', err);
});
}
这是我注册一个serviceWorker的简单例子。当我第一次加载页面时,出现错误:
Uncaught (in promise) DOMException: Subscription failed - no active Service Worker
如果我重新加载此页面,一切正常。在 Mozilla 中我没有这个错误。
为什么serviceWorker在第一次onload时注册不上?
为了接收推送事件,您需要成功安装服务工作者。您在成功安装服务工作者之前要求订阅,因此它失败了。否则看起来你的推送订阅有效,但如果唯一的工作人员安装失败,注册(以及你的订阅)就会被丢弃。
navigator.serviceWorker.ready
是一个承诺,一旦有一个活动的(成功安装的)工作人员注册就解决了。它通过注册解决,所以它在这里工作得很好。
navigator.serviceWorker.ready.then(reg => reg.pushManager.subscribe(…))
if ('serviceWorker' in navigator) {
console.log('Service Worker is supported');
navigator.serviceWorker.register('sw.js').then(function(reg) {
console.log(reg);
reg.pushManager.subscribe({
userVisibleOnly: true
}).then(function(sub) {
var endpoint = sub.endpoint;
console.log('endpoint:', sub.endpoint);
});
}).catch(function(err) {
console.log(':(', err);
});
}
这是我注册一个serviceWorker的简单例子。当我第一次加载页面时,出现错误:
Uncaught (in promise) DOMException: Subscription failed - no active Service Worker
如果我重新加载此页面,一切正常。在 Mozilla 中我没有这个错误。 为什么serviceWorker在第一次onload时注册不上?
为了接收推送事件,您需要成功安装服务工作者。您在成功安装服务工作者之前要求订阅,因此它失败了。否则看起来你的推送订阅有效,但如果唯一的工作人员安装失败,注册(以及你的订阅)就会被丢弃。
navigator.serviceWorker.ready
是一个承诺,一旦有一个活动的(成功安装的)工作人员注册就解决了。它通过注册解决,所以它在这里工作得很好。
navigator.serviceWorker.ready.then(reg => reg.pushManager.subscribe(…))