如何注销和删除旧的服务人员?

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 有啥好处?

为我们的 Beta 测试人员启用的功能,发布如何删除