Кон*_*кин 2 javascript service-worker
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);
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的serviceWorker注册的简单示例.当我第一次加载页面时,我收到错误:
未捕获(在承诺中)DOMException:订阅失败 - 没有活动的服务工作者
如果我重新加载此页面一切正常.在Mozilla我没有这个bug.为什么serviceWorker不能在第一个onload中注册?
要接收推送事件,您需要成功安装的服务工作者.您在成功安装服务工作者之前要求订阅,因此失败.否则看起来你的推送订阅会有效,但如果唯一的工作人员无法安装,则注册(以及你的订阅)会被丢弃.
navigator.serviceWorker.ready是一个承诺,一旦注册与活跃(成功安装)工人一起解决.它通过注册解决,因此在这里运行良好.
navigator.serviceWorker.ready.then(reg => reg.pushManager.subscribe(…))
Run Code Online (Sandbox Code Playgroud)