硬刷新后注册 Service Worker

2024-05-12

每当硬刷新后重新加载具有 Service Worker 的 Web 应用程序时(Ctrl + F5例如,对于 Chrome),Service Worker 之后无法注册。

根据文档W3C https://w3c.github.io/ServiceWorker/#navigator-service-worker-controller

注意:navigator.serviceWorker.controller 如果请求返回 null 是强制刷新(shift+刷新)。返回的ServiceWorker对象 从这个属性 getter 中,代表相同服务工作者的是 相同的对象。

那么问题来了:Service Worker 注册之后真的不可能吗?硬刷新被执行?我正在检查 Service Worker 是否存在navigator.serviceWorker.controller。请参阅随附的 GIF,其中显示了与https://googlechrome.github.io/samples/service-worker/basic/ https://googlechrome.github.io/samples/service-worker/basic/ page


阻止硬刷新似乎很难,但您可以检测到应该使用工作人员但当前尚未使用。然后您可以使用它重新加载。

navigator.serviceWorker.getRegistration().then(function(reg) {
  // There's an active SW, but no controller for this tab.
  if (reg.active && !navigator.serviceWorker.controller) {
    // Perform a soft reload to load everything from the SW and get
    // a consistent set of resources.
    window.location.reload();
  }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

硬刷新后注册 Service Worker 的相关文章