javascript – 硬刷新后注册服务工作者

每当具有服务工作者的Web应用程序在硬刷新后重新加载(例如,对于Chrome的Ctrl F5),服务工作者就无法在之后注册.

根据W3C的文件

Note: navigator.serviceWorker.controller returns null if the request
is a force refresh (shift+refresh). The ServiceWorker objects returned
from this attribute getter that represent the same service worker are
the same objects.

因此,问题是:在执行硬刷新后是否真的无法注册服务工作者?我正在使用navigator.serviceWorker.controller检查服务工作者是否存在.请参阅随附的GIF,其中显示了与https://googlechrome.github.io/samples/service-worker/basic/页面的互动

《javascript – 硬刷新后注册服务工作者》

最佳答案 这是一个非常复杂的故事,这里的漫长道路是:

This is actually a spec of Service Worker. And only present in recent
change of Chrome. For the earlier version of Chrome , Service Worker
has no any issue surviving a “force refresh”.

这意味着,只有在最近的Chrome更改中,问题仍然存在.在早期版本中,它没有持续存在,提示有关chrome的问题.此报价截至2016年 – 此后的所有版本将受到同样的影响,只有早期版本不会出现此问题.

有开发人员建议强制刷新或硬刷新应该总是清除所有类型的缓存.这与其存在的目的及其规格相匹配 – 但我个人认为这场比赛值得商榷.

解决方案:

您将能够使用js插件来检测Ctrl或Shift的键击…然后阻止“强制刷新”发生.

到目前为止,这是处理该问题的最简单的解决方案.

点赞