在我的 Web 应用程序上更新 chrome 85 后,Service Worker 不再安装。它在 chrome 84 或更早版本、Safari、Firefox、Microsoft Edge 浏览器上运行良好。
尝试查找更改日志或错误报告,但没有明确的提示可以阻止它。等待很长时间后,服务工作人员最终出现错误 (1),在控制台中我看到许多请求处于待处理/停滞状态。
然而,那些处于挂起状态的 url 具有路径信息,而不是静态资源,例如:
对于复制:
1.Register a service worker with global scope
navigator.serviceWorker.register('/ServiceWorker.js', { scope: '/', updateViaCache: 'none' }).then(function (registration) {
});
2. Attach install event which looks like
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(cacheName).then(function(cache) {
return cache.addAll(
[
'/css/bootstrap.css',
'/css/main.css',
'/js/bootstrap.min.js',
'/js/jquery.min.js',
'/offline.html',
'/path/subpath/par1/par2'
'/path/subpath/par1/par3'
'/path/subpath1/par4/par5'
]
);
})
);
});
3. Following request url (non static resources) will never complete and install will stuck on trying to install and eventully, in error/redudndant.
'/path/subpath/par1/par2'
'/path/subpath/par1/par3'
'/path/subpath1/par4/par5'
这是我能注意到的唯一发现。
有什么线索吗? chrome 85 Service Worker / Fetch api 中的更改可能会导致此行为。
因此,在尝试了各种方法之后,我继续查看 chromium 浏览器的源代码,发现由于某种原因,在安装 Service Worker 时默认启用请求限制,并且最多允许 3 个请求。
在我们的案例中,这种限制导致请求进入停滞状态并停留在尝试安装状态,最终导致冗余错误。
没有可用的标志来禁用限制,所以我决定使用cache.add而不是cache.addAll
处理所有的承诺,瞧,它起作用了。看来这样最大并发请求没有达到并且安装可以继续。
无法报告 chromium 上的错误,但希望一些项目成员可以研究它,至少即使他们限制了它,也可以使其恢复。
希望这暂时能帮助其他人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)