在window.unload事件上取消注册服务工作者是否可靠?

时间:2017-07-21 09:12:59

标签: javascript service-worker

我正在使用这样的东西取消注册我的服务工作者:

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

由于unregister函数返回一个promise,因此unregister进程似乎是asnyc。那么在卸载事件上取消注册是否可靠?

我已经在Chrome上测试了它的确有效,但是无法在规范中找到任何内容,也无法在任何可以验证我所做的事情是否始终有效的地方找到。

更多信息

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

2 个答案:

答案 0 :(得分:0)

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

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

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

你希望取消注册做什么?

答案 1 :(得分:0)

我不会将它绑定到一个页面上的事件,否则打开同一页面的多个选项卡将很难处理。就个人而言,我有使用setInterval的客户端的服务工作者查询,如果客户端数量减少到零,则取消注册(使用self.registration.unregister())。

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