Unregistering/Removing 一名服务工作者
Unregistering/Removing a Service Worker
我有一个糟糕的服务工作者不再更新。我首先注意到 Chrome 中的问题。然后,我将以下代码放入 index.html 文件和 sw.js(服务工作者)文件中。在大多数情况下,它似乎工作正常。 Firefox 似乎是唯一没有移除 service worker 的浏览器。我使用下面的文章创建了注销脚本。
我也用过这篇文章和代码,得到了相同的结果。
我还收到一条关于 getRegistrations()
的错误消息,说它未定义。也不知道如何解决。
非常感谢能帮助解决这两个问题。
<script>
navigator.serviceWorker.getRegistrations().then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
} });</script>
我偶然发现了这个似乎是 better-than-most 解决方案的答案。
博客Post: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))
});
});
这里对上面的代码进行了更in-depth的解释和进一步的改进。
https://love2dev.com/blog/how-to-uninstall-a-service-worker/
下面的示例代码将检查在您的浏览器中注册的 Service Worker 并获取它。
registration.active.scriptURL 将为您提供所有服务人员的确切 url。
registration.unregister();将删除该服务人员。
LINK: 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
我有一个糟糕的服务工作者不再更新。我首先注意到 Chrome 中的问题。然后,我将以下代码放入 index.html 文件和 sw.js(服务工作者)文件中。在大多数情况下,它似乎工作正常。 Firefox 似乎是唯一没有移除 service worker 的浏览器。我使用下面的文章创建了注销脚本。
我也用过这篇文章和代码,得到了相同的结果。
我还收到一条关于 getRegistrations()
的错误消息,说它未定义。也不知道如何解决。
非常感谢能帮助解决这两个问题。
<script>
navigator.serviceWorker.getRegistrations().then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
} });</script>
我偶然发现了这个似乎是 better-than-most 解决方案的答案。
博客Post: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))
});
});
这里对上面的代码进行了更in-depth的解释和进一步的改进。 https://love2dev.com/blog/how-to-uninstall-a-service-worker/
下面的示例代码将检查在您的浏览器中注册的 Service Worker 并获取它。
registration.active.scriptURL 将为您提供所有服务人员的确切 url。
registration.unregister();将删除该服务人员。
LINK: 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