【问题标题】:serviceworker does not load the first timeserviceworker 没有第一次加载
【发布时间】:2016-04-28 13:29:40
【问题描述】:
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 中我没有这个错误。 为什么第一次onload注册不了serviceWorker?

【问题讨论】:

    标签: javascript service-worker


    【解决方案1】:

    为了接收推送事件,您需要一个成功安装的 Service Worker。您在成功安装服务人员之前要求订阅,所以它失败了。否则,您的推送订阅似乎有效,但如果唯一的工作人员安装失败,则注册(以及您的订阅)将被丢弃。

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多