服务工作者第一次不加载

serviceworker does not load the first time

本文关键字:加载 第一次 工作者 服务工作 服务      更新时间:2023-09-26
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 注册的简单示例。当我第一次加载页面时,我收到错误:

未捕获(承诺中(DOMException:订阅失败 - 没有活动的服务辅助角色

如果我重新加载此页面,一切正常。在Mozilla中,我没有这个错误。为什么不能在第一次加载中注册 serviceWorker ?

为了接收推送事件,您需要一个成功安装的服务工作线程。你在成功安装服务辅助角色之前请求订阅,因此它失败。否则,看起来您的推送订阅有效,但如果唯一的辅助角色安装失败,则注册(以及您的订阅(将被丢弃。

navigator.serviceWorker.ready是一个承诺,一旦向活动(成功安装(工作人员注册,就会解决。它通过注册解决,因此在这里运行良好。

navigator.serviceWorker.ready.then(reg => reg.pushManager.subscribe(…))