Answers:
您可以通过编程方式删除服务工作者,如下所示:
navigator.serviceWorker.getRegistrations().then(function(registrations) {
for(let registration of registrations) {
registration.unregister()
} })
Docs:getRegistrations,注销
您还可以在Chrome Devtools中的“应用程序”标签下删除服务工作者。
您也可以转到URL:chrome:// serviceworker-internals /,然后从那里注销服务人员。
document.querySelectorAll(".unregister").forEach(item=>item.click())
您可以通过Chrome开发者工具以及以编程方式执行此操作。
通过键入查找所有正在运行的实例或服务工作者
chrome:// serviceworker-internals /
在新选项卡中,然后选择要注销的服务工作人员。
打开开发人员工具(F12),然后选择“应用程序”。然后
选择清除存储->取消注册服务人员
要么
选择服务人员->选择重新加载时更新
以编程方式
if(window.navigator && navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations()
.then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
}
});
}
您应该在设备中检测两个API:getRegistrations和getRegistration。服务工作者并非在所有平台上都有一套独特的API。例如,某些浏览器只有一个navigator.serviceWorker.getRegistration
,没有navigator.serviceWorker.getRegistrations
。因此,您应该同时考虑两者。
安全地卸载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();
}
});
}
检测服务人员:
navigator.serviceWorker.controller
删除服务人员的代码:
navigator.serviceWorker.getRegistrations()
.then(registrations => {
registrations.forEach(registration => {
registration.unregister();
})
});
navigator.serviceWorker.getRegistrations().then(function(registrations) {
for(let registration of registrations) {
registration.unregister()
} })
if(window.navigator && navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations()
.then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
}
});
}
if ('caches' in window) {
caches.keys()
.then(function(keyList) {
return Promise.all(keyList.map(function(key) {
return caches.delete(key);
}));
})
}
if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (const registration of registrations) {
// unregister service worker
console.log('serviceWorker unregistered');
registration.unregister();
setTimeout(function(){
console.log('trying redirect do');
window.location.replace(window.location.href); // because without redirecting, first time on page load: still service worker will be available
}, 3000);
}
});
}