我找到了这个描述如何销毁服务工作者的存储库。但是我没有找到任何描述工人何时应该销毁/卸载/注销自己的资源。
当我开发网站时,我经常使用端口 8080。我可以在具有服务工作线程的站点 X 上工作,然后在没有服务工作线程的站点 Y 上工作,但原始的和现在不正确的服务工作线程仍然存在。
服务工作者决定卸载自身的逻辑有点棘手,因为我们想要:
- 允许服务工作进程脱机工作。
- 允许服务工作者在强制 wifi 门户中幸存下来。
- 检测浏览器是否联机,但此站点不应具有服务工作进程,或者服务工作进程应为其他服务工作进程。
是否有围绕此的标准机制或公约?
简单的答案是,通常它永远不会自我毁灭。
这对您来说似乎是一个问题,因为您正在开发多个站点,然后将它们全部作为localhost:8080
进行测试。
它们是解决此特定问题的几种方法:
首先是为您在/etc/hosts
中开发的每个站点设置别名。
127.0.0.1 local.site-a.com
127.0.0.1 local.site-b.com
另一种选择是在测试时将每个项目配置为在不同的端口上运行。
最后一个选项是将您链接到的代码包含在问题中,在每个没有服务工作者的项目中。尽管这种方法理想情况下需要使构建过程仅将其包含在开发构建中。
您必须在ServiceWorker 中注册一个JavaScript文件,该文件在运行javascript文件之前会检查站点X的本地路径。
navigator.serviceWorker.register('/checking.js').then(function(registration) {
// Registration was successful
}
在检查中.js
if(window.location.href == "YOUR X SITE FILE PATH"){
//Run the javascript file which you have created for site X
}
请记住,在生产过程中,您必须将 serviceWorker(( 的参数更改为相应的 js 文件