如何卸载服务工作者?

问题描述 投票:106回答:6

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

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

html5 google-chrome service-worker
6个回答
258
投票

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

navigator.serviceWorker.getRegistrations().then(function(registrations) {
 for(let registration of registrations) {
  registration.unregister()
} })

文件:getRegistrationsunregister

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


88
投票

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


29
投票

您可以通过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();
    }
  });
}

22
投票

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

Screenshot

这种方法在站点的开发模式中是有效的,并且大部分都在localhost上运行,这是您可能需要用于其他项目的开发。


5
投票

你应该在你的设备中检测两个API:getRegistrationsgetRegistration。服务工作者在所有平台中都没有唯一的API集。例如,某些浏览器只有navigator.serviceWorker.getRegistration,没有navigator.serviceWorker.getRegistrations。所以你应该考虑两者。


2
投票

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

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

注意:除了服务工作者之外,这还将清除此域的所有缓存,cookie和数据库。


1
投票

除了已经给出的正确答案之外,如果您还想删除SW缓存,您可以使用:

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

你可以阅读more here(段落:“取消注册服务工作者”)

或者通过浏览器访问“缓存存储”部分并单击“清除站点数据”按钮:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.