7

我发现这个 repo 描述了如何销毁服务人员。但是我没有找到任何描述工人应该何时销毁/卸载/注销自身的资源。

当我开发网站时,我经常使用端口 8080。我可以在有 service worker 的站点 X 上工作,然后在没有 service worker 但原来的和现在不正确的 service worker 的站点 Y 上工作。

Service Worker 决定自行卸载的逻辑有点棘手,因为我们想要:

  • 允许 service worker 离线工作。
  • 允许服务人员在强制 wifi 门户中生存。
  • 检测浏览器在线,但该站点不应该有 service worker,或者 service worker 应该是不同的。

是否有围绕此的标准机制或约定?

4

2 回答 2

4

简单的答案是,通常它永远不会自我毁灭。

这对您来说似乎是个问题,因为您正在开发多个站点,然后将它们全部测试为localhost:8080.

他们是解决这个特定问题的几种方法:

第一个是为您开发的每个站点设置别名/etc/hosts

127.0.0.1  local.site-a.com
127.0.0.1  local.site-b.com

另一种选择是在测试时将每个项目配置为在不同的端口上运行。

最后一个选项是在每个没有服务工作者的项目中包含您在问题中链接到的代码。尽管这种方法理想情况下需要使您的构建过程仅将其包含在 Dev 构建中。

于 2020-01-06T05:27:40.777 回答
1

您必须在 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 文件

于 2020-01-10T13:11:12.730 回答