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

标签 javascript service-worker

我希望我的 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/

相关文章:

javascript - Vue v-if 在使用 interval 时不影响 Dom

internet-explorer - 如何在 Internet Explorer 中接收 GCM/FCM 通知?

javascript - 如何从 Service Worker 发送通知

php - 验证其中之一

JavaScript 子对象不可访问

javascript - 从指令更改数据时,vue.js 列表(模板)绑定(bind)不会更新

javascript - Ionic Service Worker 发送 GET 选项

service-worker - 我可以动态修改 manifest.json 文件中的 start_url 吗?

javascript - 如果使用 jQuery.ajax 或 XMLHttpRequest 发出请求,Service Worker 获取处理程序不会触发

javascript - 斯科姆报告