为了即时更新软件,您应该改进两个要点。
Shortly
- 致电您的
sw.js
also来自比应用程序索引页更常访问的页面。
- Utilize skipWaiting() https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting立即激活您的软件的方法。
详细
1) navigator.serviceWorker.register
方法调用
您应该注意,较新版本的 SWITCH 只会由navigator.serviceWorker.register() https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register call.
并且通常register()
方法将仅在您的页面之一中被调用。如果是这种情况,您应该将该命令添加到所有页面。因为如果用户只是打开另一个应用程序而不关闭您的 PWA,然后在 2 小时后返回到您的应用程序,他们将避开您所在应用程序的索引页面register()
打电话大概是。
所以,我的建议是把它放在很多页上,如果不是每一页的话。缺点是客户会拨打更多电话sw.js
。好处是客户将检索最新版本的软件而不会浪费时间。
2)激活Service Worker
服务人员的activate
当 SW 不再有任何活动时,事件将被调用clients https://developer.mozilla.org/en-US/docs/Web/API/Clients。因此,只有在应用程序的每个实例(但一个关闭)之后才会激活新版本,并且刷新剩余选项卡/重新打开一个选项卡。看引用自MDN https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Updating_your_service_worker关于此事:
..新版本已在后台安装,但尚未激活。
仅当不再加载任何页面时才会激活它
仍在使用旧的 Service Worker。一旦没有了
这些页面仍然加载,新的服务工作者激活。
这个问题的解决方案是使用skipWaiting() https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting方法结合Clients.claim() https://developer.mozilla.org/en-US/docs/Web/API/Clients/claim
摘自 MDN 的使用示例。单击以在该页面上查看更多相关信息: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting#Example
self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting());
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim());
});