首页 > 解决方案 > 当现有的“坏” serviceWorker 处于活动状态并首先缓存时强制 serviceWorker 更新

问题描述

我有一个问题,很像这个问题,现在已经有几年了。

我遇到的问题是 [a] 应用程序代码的新 JS 取消注册 ServiceWorker 或跳过等待未被解析,因为应用程序代码由旧 ServiceWorker 提供服务,并且 [b] 我完全控制服务器,但是使用 Clear-Site-Data: 响应标头不起作用,因为所有应用程序的文件都是从 ServiceWorker 或缓存提供的。它永远不会看到那个标题。唯一的新请求是向不同子域上的 API 发出的。

世界上有很多用户在使用这个应用程序。我该怎么做才能让安装了旧 serviceWorker 并在其浏览器中运行的客户端来观察新的更新?

标签: javascriptvue.jscachingprogressive-web-appsservice-worker

解决方案


在更新检查期间对底层服务工作者脚本文件的请求应始终绕过 HTTP 缓存和现有服务工作者的fetch处理程序。

您应该能够将Clear-Site-Data:标头添加到 Web 服务器返回的底层服务工作者脚本文件的响应中,并以这种方式恢复。

此外,您应该能够根据“ kill switch ”示例中的内容在服务工作者脚本文件中包含代码,并且每当浏览器进行更新检查时都会运行它,因为更新检查将绕过缓存和反对网络服务器。


推荐阅读