每当硬刷新后重新加载具有 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(使用前将#替换为@)