从根目录删除/serviceworker.js后,Chrome仍然运行我从webroot中删除的serviceworker。我如何从我的网站和Chrome卸载服务工作者,以便我可以登录回我的网站?
我已经将问题追溯到Service Work的缓存机制,现在我只想删除它,直到有时间调试它。我使用的登录脚本重定向到谷歌的服务器,让他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条ERR_FAILED消息。
从根目录删除/serviceworker.js后,Chrome仍然运行我从webroot中删除的serviceworker。我如何从我的网站和Chrome卸载服务工作者,以便我可以登录回我的网站?
我已经将问题追溯到Service Work的缓存机制,现在我只想删除它,直到有时间调试它。我使用的登录脚本重定向到谷歌的服务器,让他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条ERR_FAILED消息。
当前回答
它也可以在Chrome通过应用程序选项卡:
其他回答
以编程方式删除Service worker:
你可以像这样通过编程方式删除service worker:
navigator.serviceWorker.getRegistrations().then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
}
});
文档:getRegistrations, unregister
通过用户界面移除Service worker
你也可以在Chrome Devtools的Application标签下删除service worker。
此代码与Internet Explorer兼容:
if (navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations().then(
function(registrations) {
for (let idx in registrations) {
registrations[idx].unregister()
}
})
}
IE不支持'for…and的意思是…的“构造可能导致”“SCRIPT1004: Expected”错误
打开此页面:chrome://serviceworker-internals,单击“取消注册”按钮。
如果你想注销所有的service worker,打开开发人员工具并在上面的页面上运行这段代码。
document.querySelectorAll("button.unregister").forEach(item=>{ item.click()})
如果你的服务人员不让你更新文件。你需要用下面的代码替换serviceworker文件(sw.js / serviceworker .js):
self.addEventListener('install', function(e) {
self.skipWaiting();
});
self.addEventListener('activate', function(e) {
self.registration.unregister()
.then(function() {
return self.clients.matchAll();
})
.then(function(clients) {
clients.forEach(client => client.navigate(client.url))
});
});
源在这里
除了已经给出的正确答案之外,如果你还想删除SW缓存,你可以调用以下方法:
if ('caches' in window) {
caches.keys()
.then(function(keyList) {
return Promise.all(keyList.map(function(key) {
return caches.delete(key);
}));
})
}
更多内容请参见本文(段落:“注销服务人员”)
另一种可能是通过浏览器访问“缓存存储”部分,然后点击“清除站点数据”按钮: