Service worker 在单页应用程序中检查service worker更新
我们有一个信号页面应用程序,该应用程序已安装并处于活动状态 现在我们的服务器重建了应用程序,服务器端的服务工作者文件正在更新 我们的客户不知道这个新的服务人员文件,它仍然在使用旧的服务人员文件 什么时候起作用? 如果我刷新/重新加载应用程序,则将安装新的service worker 如果服务器上的服务人员文件正在更新,而客户端没有重新加载,我们如何刷新客户端? 可能的解决方案: 我想,我需要在1小时后进行投票。 “”对于这类问题来说是一个很好的资源 特别是,有一个: 将触发更新:Service worker 在单页应用程序中检查service worker更新,service-worker,workbox,workbox-webpack-plugin,Service Worker,Workbox,Workbox Webpack Plugin,我们有一个信号页面应用程序,该应用程序已安装并处于活动状态 现在我们的服务器重建了应用程序,服务器端的服务工作者文件正在更新 我们的客户不知道这个新的服务人员文件,它仍然在使用旧的服务人员文件 什么时候起作用? 如果我刷新/重新加载应用程序,则将安装新的service worker 如果服务器上的服务人员文件正在更新,而客户端没有重新加载,我们如何刷新客户端? 可能的解决方案: 我想,我需要在1小时后进行投票。 “”对于这类问题来说是一个很好的资源 特别是,有一个: 将触发更新: 在导航到范围
- 在导航到范围内页面时
- 在功能事件(如推送和同步)上,除非在前24小时内进行了更新检查
- 仅当服务工作者URL已更改时才调用.register()
navigator.serviceWorker.register('/sw.js').then(reg => {
// sometime later…
reg.update();
});
我可能会做的是修改SPA的路由器,并在路由器即将切换到新视图时自动调用reg.update()
。这将模拟与非SPA中相同的导航行为更新
register()如何适应?
至少调用一次navigator.serviceWorker.register()
后,服务工作者有机会安装并激活。此时,无论是否再次调用navigator.serviceWorker.register()
,都将检查服务工作者更新
本答案的前面部分描述了这些更新检查将在何时进行(隐式或显式)
通过比较service worker规范中的和作业之间的差异,您可以深入了解这方面的详细信息。您是否提供了带有HTTP缓存头的SW.js文件?我认为它应该尝试在每次加载页面时更新(来自服务器的请求),但可能它仍然从浏览器缓存中获取旧版本。请看,这是一个单页应用程序,只有当我们手动刷新或打开新选项卡时,页面才会加载。感谢您的解释。我6个月的奋斗已经得到了回答。我添加了一个history.listener来检查服务人员更新。我实现了这个流程,请求用户允许重新加载应用程序,以便跨多个选项卡获取最新更新。你可以查我的密码