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