【问题标题】: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浏览器的默认行为吗。

【问题讨论】:

    标签: google-chrome-devtools service-worker


    【解决方案1】:

    可能是我在以下链接中的回答将帮助您解决您的问题。

    Stackoverflow 链接: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

      我在强调小心,因为很容易弄错与软件相关的内容并完全破坏您的网站:)

      【讨论】:

        猜你喜欢
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-17
        • 1970-01-01
        • 2018-12-09
        相关资源
        最近更新 更多