如何卸载服务工作者?

Mar*_*lin 132 html5 google-chrome service-worker

/serviceworker.js从我的根目录中删除后,Chrome仍然运行我从我的webroot中删除的服务工作者.如何从我的网站和Chrome中卸载服务工作者,以便我可以重新登录我的网站?

我已将问题跟踪到Service Work的缓存机制,我只是想暂时删除,直到我有时间调试它.我正在使用的登录脚本会重定向到Google的服务器,以便他们登录自己的Google帐户.但是我从login.php页面得到的只是一条ERR_FAILED消息.

Dan*_*err 275

您可以这样以编程方式删除服务工作者:

navigator.serviceWorker.getRegistrations().then(function(registrations) {
 for(let registration of registrations) {
  registration.unregister()
} })
Run Code Online (Sandbox Code Playgroud)

文档:getRegistrations,取消注册

您还可以在Chrome Devtools的"应用程序"选项卡下删除服务工作者.

  • 我有一篇博客文章回顾了这个和其他服务工作者删除/卸载选项https://love2dev.com/blog/how-to-uninstall-a-service-worker/ (8认同)
  • 有没有时间基于此?假设用户访问过一次,注册了该工作者,并且从那以后还没有回来,为了防万一,我是否需要永久保留我们的代码库中的代码片段? (5认同)
  • 这有什么帮助?该页面已被安装的工作程序缓存,用户永远不会获取您的新脚本。 (5认同)
  • 以下文章讨论了此答案代码的潜在问题并提出了替代方案:https://medium.com/@nekrtemplar/self-destroying-serviceworker-73d62921d717 (3认同)
  • 我不得不添加“严格使用”;在此代码之前使其工作。 (2认同)
  • 详细版本:https://gist.github.com/mrienstra/9c60a76009480e2240770dadb2fb96fe (2认同)

k00*_*00k 94

您还可以转到URL:chrome:// serviceworker -internals /并从那里取消注册服务工作者.

  • 您可以在开发控制台中键入此命令,以一次注销所有注册。`document.querySelectorAll(“。unregister”)。forEach(item => item.click())` (2认同)

Sak*_*pal 30

您可以通过Chrome开发者工具以及编程方式执行此操作.

  1. 通过键入查找所有正在运行的实例或服务工作

    铬:// serviceworker,内部/

    在新选项卡中,然后选择要取消注册的serviceworker.

  2. 打开开发人员工具(F12)并选择应用程序.然后是

    选择清除存储 - >取消注册服务工作者

    要么

    选择服务工作者 - >选择重新加载时更新

  3. 编程方式

if(window.navigator && navigator.serviceWorker) {
  navigator.serviceWorker.getRegistrations()
  .then(function(registrations) {
    for(let registration of registrations) {
      registration.unregister();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您收集所有不同的方式。 (2认同)

Asi*_*K T 22

在Google Chrome中,您可以转到开发人员工具(F12) - >应用程序 - >服务工作者,并从该列表中取消注册该特定域的服务工作者.

截图

这种方法在站点的开发模式中是有效的,并且大多数它们运行在localhost您可能需要的其他项目的开发上.


Fra*_*sco 7

除了已经给出的正确答案之外,如果您还想删除软件缓存,您可以调用以下方法:

if ('caches' in window) {
    caches.keys()
      .then(function(keyList) {
          return Promise.all(keyList.map(function(key) {
              return caches.delete(key);
          }));
      })
}
Run Code Online (Sandbox Code Playgroud)


更多内容参见本文(段落:“取消注册 Service Worker”)


另一种可能性是通过浏览器访问“缓存存储”部分并单击“清除站点数据”按钮:

在此输入图像描述


ter*_*rse 6

仅供参考,如果您使用的是 MacOS Safari浏览器,有一种方法可以强制取消注册 Service Worker(Safari 12.1 的步骤和图像):

  1. Safari > 首选项... > 隐私 > 管理网站数据... Safari 偏好设置:隐私

  2. 输入域名(例如'localhost'),点击“删除” Safari 偏好设置:隐私:管理网站数据

注意:除了 Service Worker 之外,这还将清除此域的所有缓存、cookie 和数据库。


Guo*_*uoX 5

您应该在设备中检测到两个API:getRegistrationsgetRegistration。服务工作者并非在所有平台上都有一套独特的API。例如,某些浏览器只有一个navigator.serviceWorker.getRegistration,没有navigator.serviceWorker.getRegistrations。因此,您应该同时考虑两者。