在Safari上更新ServiceWorker而无需重新加载页面

3
我希望我的PWA在运行时能够定期更新自身,而不需要等待用户刷新页面(例如,在iOS 12上,触发PWA页面重新加载实际上非常困难)。
我知道有ServiceWorkerRegistration.update()方法,但Safari不支持它。
那么,在iOS上有没有解决方案可以让我的ServiceWorker在不重新加载页面的情况下自动更新?
附加信息:
目前,我周期性地轮询version.json文件,其中包含当前应用程序的版本,进行比较并强制重新加载页面。它工作得很好,但需要两次页面重新加载才能获得新版本(这个 + 在激活事件之后加载新应用程序资产)。
这是我的当前解决方案,如果您需要更多上下文:https://github.com/dimaip/calendar/blob/master/app/serviceWorker.js#L31

1
退回到 location.reload() 会起作用吗? - Ken Kinder
@KenKinder 嘿,是的,如果我对这个问题得到了明确的否定,那基本上就是我所想的。 - Dmitri Pisarev
1个回答

8

ServiceWorkerRegistration.update()被所有支持服务工作者的浏览器支持,并且应该可以实现您想要的功能。

如果您想自行确认它在Safari中是否受支持,请尝试运行

reg = await navigator.serviceWorker.ready
reg.update()

在Safari的JS控制台中,打开Network面板。运行之后,您应该会看到一个请求被发出,请求服务工作者。

你确定吗?因为这个页面提供了不同的信息,似乎并不受iOS Safari支持。https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/update - Dmitri Pisarev
我想不出为什么桌面版Safari会支持它,但移动版Safari不支持。这不是Service Worker规范的新部分。但你可以自己测试一下来确认。例如,我刚在XCode iOS模拟器上尝试了一下,在那里的Safari中它是可以工作的。 - Jeff Posnick
其实你是对的,我在iOS13上测试了一下,似乎完全没有问题!我被MDN文档搞混了,也没去自己检查。我已经给他们发了一条消息。 - Dmitri Pisarev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接