在 window.unload 事件上注销服务工作线程是否可靠?



我正在使用这样的东西来注销我的服务工作者:

window.addEventListener("unload", () =>{
registration.unregister().then(function(successs) {
if(successs){
console.log("Unregister succesfull!");
}
else {
console.log("unregister unsuccessfull!!");
}
});
});

由于取消注册函数返回一个承诺,因此取消注册过程似乎是 asnyc。那么在卸载事件上执行此注销是否可靠?

我已经在 Chrome 上进行了测试并且它可以工作,但在规范或任何可以验证我正在做的事情是否永远有效的地方找不到任何内容。

更多信息

我知道在文档卸载时注销服务工作者似乎很奇怪。但我没有使用服务工作者进行缓存或通知或其他 PWA 内容。我正在使用提供我在运行时生成的虚拟 HTML 页面。所以我只是打开一个带有一些虚拟 src 的 iframe,并开始拦截来自该服务工作者的来自该 iframe 的所有请求。我希望在用户关闭选项卡后取消注册此服务工作进程。

有一个工作示例,可以通过这个 查看从 TravelManager.html 调用的 RegisterServiceWorker.js 文件。

调用后我没有得到任何控制台输出,所以假设承诺没有解决?无论哪种方式,它有什么作用?恕我直言,服务工作者的注册(本质上是许多客户端/页面(不应绑定到一个页面。

清单注册/声明功能似乎在那里?

您希望注销者做什么?

我不会将其绑定到一个页面上的事件,否则很难处理打开同一页面的多个选项卡。就个人而言,我会让服务工作者使用 setInterval 查询客户端,如果客户端数量降至零,请自行注销(使用 self.registration.unregister(((。

编辑:事实证明,由于网络工作者最终被杀死,上述方法不起作用。我最终使用了上述策略,但每次关闭站点时,它都会向服务工作者发送一条消息,然后检查它还有多少客户端,而不是 setInterval。

最新更新