javascript – 如何让ServiceWorker在缓存重置/ Shift F5中生存?

我想创建一个即使在服务器离线时也可以工作的网站 – 我发现这就是
ServiceWorkers的用途.

当我用服务工作者重新加载页面而没有连接时,它工作得很好.但是,shift重新加载(例如绕过缓存)会解除服务工作者的禁用,并且“无法连接到服务器”错误.

我的问题是 – 我可以以某种方式阻止转移重新加载(转移f5,ctrl f5等)破坏服务工作者,或者至少使其恢复后不恢复连接?

最佳答案 快速回答

How to make ServiceWorker survive cache reset/Shift+F5?

理论上(*),您可以使用js插件来检测Ctrl或Shift的键击…然后阻止“强制刷新”发生

…但是这个Ctrl / Shift重新加载背后有一个故事.

(*)免责声明:我还没试过

长篇故事……(有点)

这实际上是服务工作者的规范.并且仅出现在最近的Chrome更改中.对于早期版本的Chrome,Service Worker在“强制刷新”中没有任何问题.

随着W3C的规格

navigator.serviceWorker.controller returns null if the request is a force refresh (shift+refresh).

此外,还有很多人(**)建议“强制刷新”应该总是清除所有类型的缓存.这与其存在的目的及其规格相匹配.

…此外,我们甚至在wikipedia上得到了……

Wikipedia: Bypassing your cache means forcing your web browser to re-download a web page from scratch

(**)我们,网络开发人员在服务工作者的早期阶段.

在我看来,我认为让一个部队刷新完成它的工作是可以的.因为我们几乎所有人都希望浏览器在我们这样做时不使用任何缓存.

点赞