我希望我的 PWA 在运行时定期 self 更新,而不是等待用户刷新页面(例如,在 iOS 12 上,实际上很难触发 PWA 的页面重新加载)。
我知道有 ServiceWorkerRegistration.update()方法,但 Safari 不支持它。
那么,是否有任何变通方法可以让我的 ServiceWorker 在不重新加载 iOS 页面的情况下进行 self 更新?
附加信息:
目前我定期轮询 version.json
文件,我将当前应用程序的版本放在其中,进行比较,然后强制重新加载页面。它工作正常,但需要重新加载两个页面才能获得新版本(这个 + 在激活事件之后加载新应用程序的 Assets )。
如果您需要更多上下文,这是我当前的解决方案:https://github.com/dimaip/calendar/blob/master/app/serviceWorker.js#L31
最佳答案
ServiceWorkerRegistration.update()
被所有支持 service workers 的浏览器所支持,并且应该完成你想要的。
如果您想自己确认它在 Safari 中是否确实受支持,请尝试运行
reg = await navigator.serviceWorker.ready
reg.update()
在 Safari 的 JS 控制台中,网络面板打开。运行后,您应该会看到为您的服务 worker 发出的请求。
关于javascript - 在 Safari 上更新 ServiceWorker 而无需重新加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62327829/