如果 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?)中找到了一些关于此的信息,所以它可能已修复。
使用 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?)中找到了一些关于此的信息,所以它可能已修复。