如何在sw-precache中定期点击

时间:2018-02-09 17:31:43

标签: javascript service-worker sw-precache

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

框架的选择: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>

1 个答案:

答案 0 :(得分:0)

每次在您的Web服务器上托管的服务工作文件中检测到更改时,

push都会更新缓存。 This Stack Overflow answer详细说明了对新服务工作文件进行这些检查的频率,但基本思路是它们发生的通常时间是在用户采取措施导航到服务工作者下的新URL之后范围。

虽然有proposals用于&#34;定期后台同步&#34;这将允许您明确要求浏览器检查更新&#34;在后台&#34;,没有任何使用交互,尚未在任何地方实施。有关电池寿命和使用电池资源的问题需要首先解决。

可以使用push notifications来唤醒&#34;没有用户交互的服务工作者,当服务工作者通过push事件开始运行时,它还将检查更新。您应该显示响应class LocationImage(db.Model): id = db.Column(db.Integer, primary_key=True) alt = db.Column(db.Unicode(128)) path = db.Column(db.String(64)) location_id = db.Column(db.Integer, db.ForeignKey(Location.id)) location = db.relation(Location, backref='images') @event.listens_for(LocationImage, 'after_delete') def _handle_image_delete(mapper, conn, target): try: if target.path: os.remove(op.join(base_path, target.path)) except: pass 事件的可见通知,因此虽然您可以在没有用户交互的情况下触发,但您仍然需要通过通知告知用户已发出刷新请求。