我正在使用这样的东西取消注册我的服务工作者:
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的所有请求。我希望在用户关闭选项卡后取消注册此服务工作者。
答案 0 :(得分:0)
有一个可以通过this找到的工作示例查看从TravelManager.html调用的RegisterServiceWorker.js文件。
我在调用后没有获得任何控制台输出,所以假设未解决承诺?无论哪种方式,它做什么?恕我直言,服务工作者的注册(本质上为 许多 客户/页面)不应绑定到一个页面。
清单注册/声明功能似乎在那里?
你希望取消注册做什么?
答案 1 :(得分:0)
我不会将它绑定到一个页面上的事件,否则打开同一页面的多个选项卡将很难处理。就个人而言,我有使用setInterval的客户端的服务工作者查询,如果客户端数量减少到零,则取消注册(使用self.registration.unregister())。
编辑:事实证明,由于网络工作者最终被杀,上述内容无效。我最终使用上述策略但不是setInterval,每次关闭网站时,它都会向服务工作者发送一条消息,然后检查它仍有多少客户端。