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

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


当前回答

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

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

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

其他回答

你可以通过Chrome开发工具以及编程来做到这一点。

通过键入查找所有正在运行的实例或service worker chrome: / / serviceworker-internals / 在一个新的选项卡中,然后选择要注销的serviceworker。 打开开发人员工具(F12)并选择应用程序。然后要么 选择“Clear Storage”->取消注册service worker 或 选择Service Workers ->选择“重新加载时更新” 编程

如果窗口。navigator && navigator. serviceworker) { navigator.serviceWorker.getRegistrations () 不要犹豫(函数(注册){ 为(让登记注册){ registration.unregister (); } }); }

你也可以去URL: chrome://serviceworker-internals/从那里注销一个serviceworker。

它也可以在Chrome通过应用程序选项卡:

此代码与Internet Explorer兼容:

if (navigator.serviceWorker) {
    navigator.serviceWorker.getRegistrations().then(                
        function(registrations) {
            for (let idx in registrations) {
                registrations[idx].unregister()
            }
        })
}

IE不支持'for…and的意思是…的“构造可能导致”“SCRIPT1004: Expected”错误

您应该在设备中检测到两个API: getRegistrations和getregiregistration。service-worker并不是在所有平台上都有一组唯一的api。例如,一些浏览器只有navigator.serviceWorker。getregiregistration,没有navigator.serviceWorker.getRegistrations。所以你应该两者都考虑。