/serviceworker.js从我的根目录中删除后,Chrome仍然运行我从我的webroot中删除的服务工作者.如何从我的网站和Chrome中卸载服务工作者,以便我可以重新登录我的网站?
我已将问题跟踪到Service Work的缓存机制,我只是想暂时删除,直到我有时间调试它.我正在使用的登录脚本会重定向到Google的服务器,以便他们登录自己的Google帐户.但是我从login.php页面得到的只是一条ERR_FAILED消息.
我正在玩我的计算机中的服务工作者API,所以我可以掌握如何在我的真实应用程序中从中受益.
我遇到了一个奇怪的情况,我注册了一个拦截fetch事件的服务工作者,因此它可以在向源发送请求之前检查其缓存中是否有所请求的内容.问题是这段代码有一个错误,导致函数无法发出请求,因此我的页面留空; 什么都没发生.由于服务工作者已经注册,第二次加载页面时它会拦截第一个请求(加载HTML的请求).因为我有这个错误,那个fetch事件失败了,它从不会请求HTML,所有我都看到它是一个空白页面.
在这种情况下,我知道删除坏服务工作者脚本的唯一方法是通过chrome://serviceworker-internals/控制台.如果此错误进入实时网站,这是解决它的最佳方法吗?
谢谢!
我发现这个 repo 描述了如何销毁 service worker。但是我没有找到任何描述工人何时应该销毁/卸载/取消注册自己的资源。
当我开发网站时,我经常使用端口 8080。我可以在有 Service Worker 的站点 X 上工作,然后在没有 Service Worker 的站点 Y 上工作,但原来的和现在不正确的 Service Worker 仍然存在。
Service Worker 决定自行卸载的逻辑有点棘手,因为我们想要:
是否有围绕此的标准机制或约定?
javascript offline self-destruction service-worker progressive-web-apps
我已经使用.register注册了一个服务woker,可以在开发工具的“应用程序”选项卡中看到。现在我的问题是如何注销此服务工作者。
我已经运行了这个脚本
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
console.group('====SW registration=======');
navigator.serviceWorker.register('/sw.js', {scope: './'}).then(function(registration) {
console.log('SW registratered successfully');
console.log(registration);
registration.unregister().then(function(result) {
console.log('Unregistered done', result);
});
}).catch(function(error){
console.error('sw registration failed', error);
});
console.groupEnd();
});
}
Run Code Online (Sandbox Code Playgroud)
但是我看到这样做,实际上是在先注册服务工作者,然后再取消注册。这对我来说似乎不是正确的方法。
或者,我可以从开发工具“ 应用程序”>“服务工作者”中单击服务工作者附近的注销链接,还可以单击“ 应用程序”>“清除存储”,然后在新选项卡中重新打开URL。
但是当我通过chrome:// serviceworker-internals /查看时
它在列表的底部显示旧的和未注册的服务人员的列表(参见图片)
那么,为什么在这里看到冗余服务人员列表?什么时候更新?这是chrome浏览器的默认行为吗?