【问题标题】:Workbox Window "controlling" event doesn't get called if sw was updated through wb.update()如果通过 wb.update() 更新了 sw,则不会调用 Workbox 窗口“控制”事件
【发布时间】:2021-03-29 13:34:53
【问题描述】:

使用 Workbox 4.3.1:

我已经按照这里的预先配方:https://developers.google.com/web/tools/workbox/guides/advanced-recipes

如果当用户刷新页面时,检测到新的 service worker 并进入等待状态,这一切都很好。

我正在这样做,但也设置了一个间隔来调用“wb.update()”来检查新版本,因为人们不会经常重新加载我的 PWA。

这是因为服务工作者进入等待状态,当他们点击我的更新按钮时,“SKIP_WAITING”消息成功地将其激活,但“控制”挂钩由于某种原因不再起作用,所以“ window.location.reload()" 不起作用。

有什么想法吗?高级配方没有提及任何关于客户声明的内容,但我的 service worker 中确实有 workbox.core.clientsClaim()。

【问题讨论】:

    标签: workbox


    【解决方案1】:

    经过大约 80 次不同的实验,唯一有效的方法是插入

    navigator.serviceWorker.addEventListener("controllerchange", (event) => {
      window.location.reload();
    });
    

    就在……之前

    messageSW(this.waiting, { type: "SKIP_WAITING" });
    

    希望它可以帮助某人。我确实在更高版本的工作箱(v6?)中找到了一些关于此的信息,所以它可能已经修复了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多