首页 > 解决方案 > PWA service-worker 无法在没有刷新页面或 F5 的情况下更新

问题描述

下午好,我有一个 PWA 应用程序需要更新。当我进入 PWA 或执行 F5 时,它可以正常工作。但问题是其中一个 PWA 屏幕是一个仪表板,客户端可能会在其中数天(因此它不会执行 F5)并且应该在没有 F5 的情况下进行更新。我正在使用 setInterval () 进行测试,但在 F5 完成之前它不会捕获更新。

代码运行(我每 5 秒看到一次 console.log),但直到我执行 F5 才找到更新

我的应用程序组件:

initializeApp() {
    setInterval(() => { 
      console.log("cheking updates")
      if (this.swUpdate.available) {
        this.swUpdate.available.subscribe(() => {
          if (confirm("a new version si available."))
            window.location.reload();
          });
      }
    }, 5000)
}

标签: angulartypescriptionic-frameworkprogressive-web-appsservice-worker

解决方案


我认为这就是它应该发生的方式。这样看,服务工作者(和您的应用程序)正在浏览器中运行。

当您部署应用程序更新时,该应用程序更新会到达托管服务器,如果您的应用程序不与托管服务器通信,它就不会知道有可用的更新。

我一直认为SwUpdateobservable 更像是一种“绕过缓存”的更新,当您刷新时,它会获取更新,并独立于缓存中的数据加载新版本。


推荐阅读