0

我一直在尝试在没有用户交互的情况下获取和更新服务人员。我能够缓存页面,但只有在刷新时我才能获取更新构建,这需要用户交互。关于如何完成的任何帮助。

框架选择:Angular2、sw-precache(Library)

这是我的顶级脚本

<script>
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
      console.log('Service Worker registered');
    }).catch(function(err) {
      console.log('Service Worker registration failed: ', err);
    });
  }
</script>
4

1 回答 1

0

sw-precache每次在您托管在 Web 服务器上的服务工作人员文件中检测到更改时,都会更新缓存。这个 Stack Overflow 答案详细说明了对新服务工作人员文件进行这些检查的频率,但基本思想是,它们发生的通常时间是在用户采取行动导航到服务工作人员范围内的新 URL 之后。

虽然有“定期后台同步”的提议,允许您专门请求浏览器“在后台”检查更新,而无需任何使用交互,但尚未在任何地方实现。有关于电池寿命和使用电池资源的问题需要首先解决。

可以使用推送通知在没有用户交互的情况下“唤醒”服务工作人员,并且当服务工作人员通过push事件开始运行时,它还将检查更新。您应该显示一个可见的通知来响应push事件,因此虽然您可以在没有用户交互的情况下触发一个通知,但您最终仍需要通过通知告诉用户已发出刷新请求。

于 2018-02-13T18:34:11.143 回答