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

Dmi*_*tri 3 javascript service-worker

我希望我的 PWA 在运行时定期更新自身,而不是等待用户刷新页面(例如,在 iOS 12 上,实际上很难触发 PWA 的页面重新加载)。

我知道有ServiceWorkerRegistration.update()方法,但 Safari 不支持它。

那么,是否有任何解决方法可以让我的 ServiceWorker 在 iOS 上无需重新加载页面即可进行自我更新?

附加信息:

目前,我定期轮询version.json文件,在其中放置当前应用程序的版本,进行比较,然后强制页面重新加载。它工作正常,但需要重新加载两个页面才能获取新版本(此+在激活事件之后加载新应用程序的资产)。

如果您需要更多上下文,这是我当前的解决方案:https://github.com/dimaip/calendar/blob/master/app/serviceWorker.js#L31

Jef*_*ick 8

ServiceWorkerRegistration.update()所有支持 Service Worker 的浏览器都支持它,并且应该可以完成您想要的任务。

如果您想亲自确认 Safari 确实支持它,请尝试运行

reg = await navigator.serviceWorker.ready
reg.update()
Run Code Online (Sandbox Code Playgroud)

在 Safari 的 JS 控制台中,打开“网络”面板。运行该命令后,您应该会看到向您的 Service Worker 发出的请求。