注销/删除 Service Worker
Posted
技术标签:
【中文标题】注销/删除 Service Worker【英文标题】:Unregistering/Removing a Service Worker 【发布时间】:2018-09-19 07:45:56 【问题描述】:我有一个不再更新的不良服务人员。我首先注意到 Chrome 中的问题。然后,我将以下代码放入 index.html 文件和 sw.js(服务工作者)文件中。在大多数情况下,它似乎工作正常。 Firefox 似乎是唯一没有移除 service worker 的浏览器。我使用下面的文章创建了注销脚本。
How do I uninstall a Service Worker?
我也使用了这篇文章和代码,得到了相同的结果。
How can I remove a buggy service worker, or implement a "kill switch"?
我还收到getRegistrations()
的错误消息,说它未定义。也不知道怎么解决。
非常感谢您对这两个问题的帮助。
<script>
navigator.serviceWorker.getRegistrations().then(function(registrations)
for(let registration of registrations)
registration.unregister();
);</script>
【问题讨论】:
这能回答你的问题吗? How do I uninstall a Service Worker? 【参考方案1】:下面的示例代码将检查在您的浏览器中注册的服务工作者并获取它。
registration.active.scriptURL 将为您提供所有服务人员的准确网址。
注册.unregister();将删除该服务人员。
链接:https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/unregister
if ('serviceWorker' in navigator)
navigator.serviceWorker.getRegistrations()
.then(function(registrations)
for(let registration of registrations)
if(registration.active.scriptURL == 'http://localhost/my-push/myworker.js') registration.unregister();
);
如果你想更新 service worker 代码而不是使用https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/update
【讨论】:
【参考方案2】:我偶然发现了这个似乎比大多数解决方案更好的答案。
博文:https://medium.com/@nekrtemplar/self-destroying-serviceworker-73d62921d717
Github:https://github.com/NekR/self-destroying-sw
它用这段代码破坏自己:
self.addEventListener('install', function(e)
self.skipWaiting();
);
self.addEventListener('activate', function(e)
self.registration.unregister()
.then(function()
return self.clients.matchAll();
)
.then(function(clients)
clients.forEach(client => client.navigate(client.url))
);
);
这是对上述代码的更深入的解释和进一步的改进。 https://love2dev.com/blog/how-to-uninstall-a-service-worker/
【讨论】:
我必须将您的答案和 Akhilesh 结合起来。我在 sw.js 文件中添加了您在上面编写的脚本。我将此代码添加到 HTML 文件中:if ('serviceWorker' in navigator) navigator.serviceWorker.getRegistrations() .then(function(registrations) for(let registration of registrations) if(registration.active.scriptURL == 'http://localhost/my-push/myworker.js') registration.unregister(); );
然后删除了旧的服务人员。感谢您的帮助!
我也有同样的问题。我应该添加什么文件名?以上是关于注销/删除 Service Worker的主要内容,如果未能解决你的问题,请参考以下文章
安卓服务service全解,生命周期,前台服务后台服务,启动注销绑定解绑,注册
JWT 注销:在微服务架构中的服务之间共享被列入黑名单的无效令牌
Java45旅游案例:数据回显,注销/退出,首页类别显示,精选