javascript - 需要有关在域中使用多服务人员的信息
问题描述
我有一个 PWA 网站,并且有自己service-worker.js
的缓存文件。由于某些原因,我想在我的网站上使用推送通知服务。我应该知道这些问题的答案:
1)如何在网站根目录中使用多服务工作者?
2)我可以使用一个服务工作者文件并将importscript
两个服务工作者中的两个放在上面吗?
3)我可以使用虚假范围来注册服务人员吗?(我的意思是使用范围,它不在我的网站路径中。)
4) 如果我使用importscript
,我的老用户仍然可以使用缓存吗?
我尝试在网站的根目录中使用一个服务工作者,并importscript
像这样使用到这个服务工作者文件中:
importScripts('https://cdn.onesignal.com/sdks/OneSignalSDKWorker.js');
importScripts('service-worker.js');
我收到了推送通知,一切正常,但我不知道我的旧用户缓存文件是否仍然可用?
另外,我尝试将它们都与注册范围一起使用,但用于订阅的navigator.serviceWorker.ready
( promise
) 始终位于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)如何在网站根目录中使用多服务工作者?
您只能在指定范围内按站点注册一个服务工作人员:因此范围内只有一个/
服务工作人员,但您可以在站点的每个范围内添加一个服务工作人员(即:一对一/
)/user
但您可以合并 2 个服务工作人员如果你需要的话,合二为一。
2)我可以使用一个服务工作者文件并将两个服务工作者的两个导入脚本放在上面吗?
是的,您可以这样做,您可以放置您需要的任意数量的 eventListener,它们按声明顺序执行,但要小心,除非require
在 javascript 中,所有脚本导入importScripts()
共享相同的范围,因此如果单个脚本它们可能会出现一些问题共享一些变量名。
3)我可以使用虚假范围来注册服务人员吗?(我的意思是使用范围,它不在我的网站路径中。)
您可以,但 SW 的范围决定了它的执行上下文,因此它将加载到您的计算机/手机上,但只有在其范围内的请求时才有效,如果您在它下面的页面上(website.com/fake
或website.com/fake/whateverelse
)或者如果您调用此范围内的资源 ( website.com/fake/style.css
)
4) 如果我使用 importscript,我的老用户仍然可以使用缓存吗?
这取决于你在你的install
阶段activate
所做的事情。除非您在代码中明确执行,否则安装新软件或其新版本不会清除缓存。
推荐阅读
- google-analytics - 向 Google Analytics 发送虚拟页面视图时动态设置页面值
- math - 归一化向量函数返回意外结果
- html - CSS:带有弯曲边缘和居中文本(水平和垂直居中)
- c - 如何知道重新分配后字符串指针是否真的变小了?
- c++ - constexpr 值作为指针类型的非类型模板参数
- angular - Ag-grid 自定义工具提示组件模板未显示
- python - 基于另一列替换列中的值
- authentication - 如何在 Ast.NET core MVC 中为登录页面创建下拉列表?
- tensorflow - 会话图为空,尽管图设置为默认值
- java - 方法 setSize(new Dimension(1024, 768)) 在 Selenium 中有什么作用?