需要有关在域中使用多服务工作者的信息

时间:2019-05-18 13:35:22

标签: javascript push-notification service-worker web-push

我有一个PWA网站,并且有自己的service-worker.js文件用于缓存。由于某些原因,我想在我的网站上使用推送通知服务。我应该知道这些问题的答案:

1)如何在网站根目录中使用多服务工作者?

2)我可以使用一个服务工作者文件,并在其中放置两个importscript,两个服务工作者吗?

3)我可以使用伪造的范围注册服务工作者吗? (我的意思是使用范围,它不在我的网站路径中。)

4)如果我使用importscript,旧用户仍然可以使用缓存吗?

我试图在网站的根目录中使用一个service-worker,并使用importscript到该服务工作程序文件中,如下所示:

importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js');
importScripts('service-worker.js');

我有一个推送通知,一切正常,但是我不知道我的旧用户缓存文件仍然可用吗?

此外,我尝试将两个注册都与在范围内注册一起使用,但是navigator.serviceWorker.readypromise)的订阅始终在pending中:

navigator.serviceWorker.register('/service-worker.js', {scope: '/fake'})
        .then((registration) => {
          console.log('ServiceWorker registration successful.', registration)
          return navigator.serviceWorker.ready
        })
        .catch(error => {
          console.error('ServiceWorker registration failed.', error)
        })
console:

navigator.serviceWorker.ready = Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "pending"
[[PromiseValue]]: undefined

1 个答案:

答案 0 :(得分:1)

我会尽力回答您的问题:

1)如何在网站根目录中使用多服务工作者?

您只能在指定范围内按站点注册一个服务工作者:因此,在/范围中只能注册一个服务工作者,但是您可以在站点的每个范围中添加一个服务工作者(即:在{{1 }}和/上的一个) 但是如果需要,您可以将2个服务人员合并为一个。

2)我可以使用一个服务工作者文件,并在其中放两个服务工作者的两个importscript吗?

是的,您可以放置​​任意数量的eventListener,它们按声明顺序执行,但是要小心,除非javascript中的/user,所有脚本都以require导入共享相同的作用域,因此如果单个脚本共享某个变量名,它们可能会遇到问题。

3)我可以使用伪造的范围注册服务工作者吗? (我的意思是使用范围,它不在我的网站路径中。)

您可以,但是SW的范围决定了它的执行上下文,因此它将被加载到您的计算机/电话上,但是只有在其下一页({{1} }或importScripts()),或者如果您在此范围内调用资源(website.com/fake

4)如果我使用importscript,旧用户仍然可以使用缓存吗?

这取决于您在website.com/fake/whateverelsewebsite.com/fake/style.css阶段所做的工作。除非您在代码中明确进行安装,否则安装新的SW或新版本的SW不会清除缓存。