我一直在 Chrome 计算机和 Chrome Android 手机上测试 Service Worker。
结果是:
首先我很困惑,因为我认为 Service Worker + 缓存问题之间的混合只是一团糟。
我看到的是,如果我更改 .js 文件,导航器不会捕捉到它。所以我解决它的方法是使用脚本调用的版本:
<script src="jquery-functions.js?ver=1.54"></script>
每次更改文件中的代码时,请确保增加版本(在我的情况下:ver=1.55)
这仅适用于计算机和 Android,并且 Server Worker 根本不会干扰。它适用于网页版和 webApp 版。
另一个问题是如何更改或更新 service worker 本身。
我尝试的第一件事是删除对服务工作者文件的脚本调用。这不会删除 service worker。
我寻找删除服务工作者的代码,这似乎在 Chrome 计算机和 Android 版 Chrome 上正常工作。
// REMOVE ALL SERVICE WORKERS
navigator.serviceWorker.getRegistrations().then(
function(registrations) {
for(let registration of registrations) {
registration.unregister();
}
});
// AND REMOVE ALL CACHES
caches.keys().then(function(names) {
for (let name of names)
caches.delete(name);
});
在电脑上:
一旦在没有 service worker 脚本的情况下应用此代码,它仍会运行,但会显示以下控制台消息:domain.name - 已删除。
在第二次重新加载后,服务工作者的状态有这样的消息:'# Status isredundant'。 (这似乎没问题;Service Worker 已被移除)
如果我再次运行服务工作者,如果我在 chrome 控制台上向下滚动,我可以看到另一个服务工作者正在运行;所以它似乎工作正常;这是杀死 Service Worker 并唤醒他们的方法。
在 Android 手机上启动 webApp 主屏幕图标时:
首次打开时一如既往:服务人员似乎继续正常工作。 (行为与 Chrome 计算机相同)
我第二次尝试使用“飞行模式”打开 webApp 主屏幕图标(以测试 Service Worker 的功能)时,当没有互联网连接时,我得到了导航器的典型错误。我理解这种行为是正确的,因为 Service Worker 已被杀死。
我认为这是对 Service Workers 有一点信心的第一步,但如果您有更多信息或测试,请将您的反馈发送给我。
使用带有“应用程序”->“服务工作者”选项卡的 Chrome 控制台很重要,这样您就可以看到后面发生的事情。
作为一个小奖励,当用户没有互联网连接时,最好通知用户无法保存更改。这就是我所做的简单方法:
setInterval(() => {
if (!navigator.onLine) { niceAlert("No Internet connection detected. Your changes will not be saved"); }
},5000);