从根目录删除/serviceworker.js后,Chrome仍然运行我从webroot中删除的serviceworker。我如何从我的网站和Chrome卸载服务工作者,以便我可以登录回我的网站?
我已经将问题追溯到Service Work的缓存机制,现在我只想删除它,直到有时间调试它。我使用的登录脚本重定向到谷歌的服务器,让他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条ERR_FAILED消息。
从根目录删除/serviceworker.js后,Chrome仍然运行我从webroot中删除的serviceworker。我如何从我的网站和Chrome卸载服务工作者,以便我可以登录回我的网站?
我已经将问题追溯到Service Work的缓存机制,现在我只想删除它,直到有时间调试它。我使用的登录脚本重定向到谷歌的服务器,让他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条ERR_FAILED消息。
当前回答
你也可以去URL: chrome://serviceworker-internals/从那里注销一个serviceworker。
其他回答
你可以通过Chrome开发工具以及编程来做到这一点。
通过键入查找所有正在运行的实例或service worker chrome: / / serviceworker-internals / 在一个新的选项卡中,然后选择要注销的serviceworker。 打开开发人员工具(F12)并选择应用程序。然后要么 选择“Clear Storage”->取消注册service worker 或 选择Service Workers ->选择“重新加载时更新” 编程
如果窗口。navigator && navigator. serviceworker) { navigator.serviceWorker.getRegistrations () 不要犹豫(函数(注册){ 为(让登记注册){ registration.unregister (); } }); }
在Chrome中打开
chrome: / / serviceworker-internals / ?devtools
然后在控制台中F12 $ $ (' .unregister”)。forEach(b => b.click())
以编程方式删除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。
典型的JavaScript循环与所有东西兼容:
navigator.serviceWorker.getRegistrations().then(function(registrations) {
var registrationslength = registrations.length;
for (var i = 0; i < registrationslength; i++) {
registrations[i].unregister();
}
})
对我来说,我只是用一个新的不存在的scope service worker来代替旧的scope service worker,
ServiceWorker: {
events: true,
// what range of URLs a service worker can control. Use a nonexistent path to disable ServiceWorker
scope: '/disable-service-worker/',
},
对于app.js,我添加了以下代码来注销旧的sw:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistrations().then(registrations => {
for (const registration of registrations) {
// keep only serviceWorker which scope is /disable-service-worker/, The purpose is to make serviceWorker useless
if (registration.scope.includes('/disable-service-worker/') === false) {
registration.unregister()
}
}
});
// clear cache of service worker
caches.keys().then(keyList => {
return Promise.all(
keyList.map(key => {
return caches.delete(key);
}),
);
});
}