Javascript 需要有关在域中使用多服务工作程序的信息
我有一个PWA网站,有自己的Javascript 需要有关在域中使用多服务工作程序的信息,javascript,push-notification,service-worker,web-push,Javascript,Push Notification,Service Worker,Web Push,我有一个PWA网站,有自己的service worker.js文件用于缓存。出于某些原因,我想在我的网站上使用推送通知服务。我应该知道这些问题的答案: 1) 如何在网站根目录中使用多服务工作人员 2) 我可以使用一个服务人员文件并在其上放置两个服务人员的importscript 3) 我可以使用假范围注册服务人员吗?(我的意思是使用范围,但它不在我的网站路径中。) 4) 如果我使用importscript,缓存是否仍可用于我的老用户 我尝试在网站的根目录中使用一个服务人员,并将importscr
service worker.js
文件用于缓存。出于某些原因,我想在我的网站上使用推送通知服务。我应该知道这些问题的答案:
1) 如何在网站根目录中使用多服务工作人员
2) 我可以使用一个服务人员文件并在其上放置两个服务人员的importscript
3) 我可以使用假范围注册服务人员吗?(我的意思是使用范围,但它不在我的网站路径中。)
4) 如果我使用importscript
,缓存是否仍可用于我的老用户
我尝试在网站的根目录中使用一个服务人员,并将importscript
使用到该服务人员文件中,如下所示:
importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js');
importScripts('service-worker.js');
我收到了推送通知,一切正常,但我不知道我的旧用户缓存文件仍然可用
此外,我还尝试使用register将它们两个都注册到scope中,但是navigator.serviceworner.ready
(promise
)的订阅始终处于挂起状态:
navigator.serviceWorker.register('/service worker.js',{scope:'/fake'})
。然后((注册)=>{
console.log('ServiceWorker注册成功',注册)
返回navigator.serviceWorker.ready
})
.catch(错误=>{
console.error('ServiceWorker注册失败',错误)
})
控制台:
navigator.serviceWorker.ready=承诺{}
__承诺
[[PromiseStatus]]:“待定”
[[PromiseValue]]:未定义
我将尝试回答您的问题:
1) 如何在网站根目录中使用多服务工作人员
您只能在指定范围内按站点注册一名服务人员:因此,只能在/
范围内注册一名服务人员,但您可以在站点的每个范围内添加一名服务人员(即:在/
上注册一名,在/user
上注册一名)
但如果需要,您可以将2个服务人员合并到一个服务人员中
2) 我可以使用一个服务人员文件并在其上放置两个服务人员的importscript吗
是的,您可以这样做,您可以放置任意数量的eventListener,它们是按声明顺序执行的,但是要小心,除非javascript中的要求,否则所有带有importScripts()
的脚本导入共享相同的范围,因此如果单个脚本共享某个变量名,它们可能会出现一些问题
3) 我可以使用假范围注册服务人员吗?(我的意思是使用范围,但它不在我的网站路径中。)
您可以,但软件的范围决定了它的执行上下文,所以它将被加载到您的计算机/手机上,但只有当您在它的范围内的页面上(website.com/fake
或website.com/fake/whateverels
),或者如果您在这个范围内调用ressource(website.com/fake/style.css
),它才有效
4) 如果我使用importscript,缓存是否仍然适用于我的老用户
这取决于您在安装
和激活
阶段所做的工作。除非您在代码中明确地执行此操作,否则安装新软件或其新版本不会清除缓存