更改后,Workbox的服务工作者无法更新

时间:2019-07-30 17:37:19

标签: service-worker workbox

说明

我遇到Workbox的问题,除非更改文件内容,否则我的网站不会更新,除非我在浏览器中手动清除了存储/站点数据。

自从今年v4发布以来,我代码中的cleanupOutdatedCaches应该可以解决这个问题,但是问题仍然存在。

示例

我创建了this website来举例说明。一旦访问它,Workbox将安装服务工作者,但是如果我将test1更改为test2,则除非更改了浏览器中的站点数据,否则您将看不到更改。刷新。

我也只尝试注销sw;它显示了更新的版本(test2),但是刷新两次后,它又返回到旧版本(test1)。

您可以在GitHub here中查看网站的代码。

预先感谢,
路易斯。

1 个答案:

答案 0 :(得分:1)

cleanOutdatedCaches 将仅清除由旧版工作箱库创建的缓存。在这种情况下,由于您使用的是同一版本的工作箱,因此对该方法的调用不会执行任何操作。

https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.precaching#.cleanupOutdatedCaches

Workbox预先缓存了特定文件后,它将永远不会尝试从网络中检索该文件,除非您在 precacheAndRoute 调用中指定的修订版本与先前缓存的版本不同。< / p>

由于您更改了index.html,但未更改 precacheAndRoute 中的修订,因此工作箱假定该文件未更改。因此,您需要做的是使用对应于新版本index.html

的新哈希值更新 precacheAndRoute

您可以通过使用injectManifest来实现 https://developers.google.com/web/tools/workbox/modules/workbox-build

或您使用的任何其他构建工具。

编辑:

您也可以通过编程方式调用skipWaiting https://developers.google.com/web/tools/workbox/modules/workbox-core#skip_waiting_and_clients_claim

但是您必须谨慎使用它。这是一种实现方法: https://developers.google.com/web/tools/workbox/guides/advanced-recipes