【问题标题】:Update ServiceWorker without page reload on Safari无需在 Safari 上重新加载页面即可更新 ServiceWorker
【发布时间】:2020-06-11 15:24:56
【问题描述】:

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

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

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

附加信息:

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

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

【问题讨论】:

  • 会依靠location.reload() 工作吗?
  • @KenKinder 嘿,是的,如果我对这个问题有一个明确的否定,这基本上就是我的想法。

标签: javascript service-worker


【解决方案1】:

ServiceWorkerRegistration.update() 受到所有支持服务工作者的浏览器的支持,并且应该可以完成您想要的。

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

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

在 Safari 的 JS 控制台中,打开“网络”面板。运行后,您应该会看到为您的服务工作人员发出的请求。

【讨论】:

  • 你确定吗?因为这个页面提供了不同的信息,所以iOS Safari好像不支持developer.mozilla.org/en-US/docs/Web/API/…
  • 我想不出桌面 Safari 会支持它但移动版 Safari 不支持的任何原因。它不是服务工作者规范的新部分。但是您可以自己测试一下以确认。例如,我刚刚在 XCode iOS Simulator 上尝试过它,它在那里的 Safari 中运行。
  • 其实你是对的,我在iOS13上测试过,感觉还不错!我对 MDN 文档感到困惑,并没有费心去检查自己。我已经给他们发了一张便条。
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2014-08-25
  • 2020-02-16
  • 1970-01-01
相关资源
最近更新 更多