如何注销和删除旧的服务人员?
Posted
技术标签:
【中文标题】如何注销和删除旧的服务人员?【英文标题】:How to unregister and remove old service worker? 【发布时间】:2018-03-07 13:18:00 【问题描述】:我已经使用 .register 注册了一个服务唤醒器,并且可以在开发工具的应用程序选项卡中看到。现在我的问题是如何取消注册这个服务工作者。
我已经运行了这个脚本
if ('serviceWorker' in navigator)
window.addEventListener('load', function()
console.group('====SW registration=======');
navigator.serviceWorker.register('/sw.js', scope: './').then(function(registration)
console.log('SW registratered successfully');
console.log(registration);
registration.unregister().then(function(result)
console.log('Unregistered done', result);
);
).catch(function(error)
console.error('sw registration failed', error);
);
console.groupEnd();
);
但我看到这样做,我们实际上是先注册服务工作者,然后再取消注册。这对我来说似乎不是正确的方法。
或者,我可以从开发工具 Application > Service Worker 中点击 Service Worker 附近的 unregister 链接,然后点击 Application >Clear Storage em> 并在新标签页中重新打开 URL。
但是当我检查 chrome://serviceworker-internals/
它在列表底部显示旧的和未注册的服务人员列表(见图)
那么为什么我会在这里看到冗余服务人员列表?什么时候更新?这是chrome浏览器的默认行为吗。
【问题讨论】:
【参考方案1】:可能是我在以下链接中的回答将帮助您解决您的问题。
*** 链接:Unregistering/Removing a Service Worker
链接:https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/unregister
如果你想更新 service worker 代码而不是使用https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/update
以下代码将删除服务工作者(取消注册)
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();
);
【讨论】:
【参考方案2】:您应该指定为什么要取消注册 Service Worker。
我想有两种可能:
您想摆脱 /service-worker.js 文件并完全删除 SW 您想拥有一个新的/更新的软件并替换以前的软件第一种情况: 查看这个答案:How do I uninstall a Service Worker?
第二种情况: 您不必取消注册旧软件,只需更新 /service-worker.js 中的代码并将其注册到旧软件之上。这是通常的情况。新的、更新的 SW 将接管,过时的将消失。 我建议你仔细阅读这些教程: https://developers.google.com/web/fundamentals/instant-and-offline/service-worker/lifecycle https://developers.google.com/web/fundamentals/getting-started/primers/service-workers
我在强调小心,因为很容易弄错与软件相关的内容并完全破坏您的网站:)
【讨论】:
以上是关于如何注销和删除旧的服务人员?的主要内容,如果未能解决你的问题,请参考以下文章
将我们自己的 OAuth 2 代码从旧的人员 API 转换为新的人员 API
对于 Selenium 测试人员,使用 Marionette FirefoxDriver 而不是旧的 Selenium FirefoxDriver 有啥好处?