如果 sw 是通过 wb.update() 更新的,则不会调用 Workbox Window "controlling" 事件

Workbox Window "controlling" event doesn't get called if sw was updated through wb.update()

使用 Workbox 4.3.1:

我已经遵循了这里的高级食谱:https://developers.google.com/web/tools/workbox/guides/advanced-recipes

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

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

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

有什么想法吗?高级配方没有提及任何关于客户索赔的内容,但我的服务人员中确实有 workbox.core.clientsClaim()。

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

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

就在……

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

希望对大家有所帮助。我确实在更高版本的 workbox(v6?)中找到了一些关于此的信息,所以它可能已修复。