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

我已经将问题追溯到Service Work的缓存机制,现在我只想删除它,直到有时间调试它。我使用的登录脚本重定向到谷歌的服务器,让他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条ERR_FAILED消息。


当前回答

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

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

更多内容请参见本文(段落:“注销服务人员”)

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

其他回答

安全卸载Service Worker

if ('serviceWorker' in navigator) {
      navigator.serviceWorker.getRegistrations().then(function (registrations) {
        for (const registration of registrations) {
          // unregister service worker
          console.log('serviceWorker unregistered');
          registration.unregister();
        }
      });
    }

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

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

更多内容请参见本文(段落:“注销服务人员”)

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

典型的JavaScript循环与所有东西兼容:

navigator.serviceWorker.getRegistrations().then(function(registrations) {
    var registrationslength = registrations.length;
    for (var i = 0; i < registrationslength; i++) {
        registrations[i].unregister();
    }
})

打开此页面:chrome://serviceworker-internals,单击“取消注册”按钮。

如果你想注销所有的service worker,打开开发人员工具并在上面的页面上运行这段代码。

document.querySelectorAll("button.unregister").forEach(item=>{ item.click()})

仅供参考,如果你使用的是MacOS Safari浏览器,有一种方法可以强制注销service worker (Safari 12.1的步骤和图片):

Safari >首选项…>隐私>管理网站数据… 输入域名(例如。'localhost'),点击“删除”

注意:除了service worker之外,这还将删除该域的所有缓存、cookie和数据库。