首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义PWA版本管理

自定义PWA版本管理
EN

Stack Overflow用户
提问于 2019-04-06 03:42:32
回答 2查看 1.5K关注 0票数 6

一般情况下,可以获得pwa应用程序的onload事件。我的意思是我们实现了一个自定义版本控制逻辑,以便保持基于数据库字段的应用版本(即清除服务工作者缓存)。这里的问题是逻辑几乎可以工作,但是当数据库中更新一个新版本时,我们需要清除相应浏览器的缓存,以便触发更新。在更多的调查中,我发现一旦pwa应用被打开,它就会保留某种缓存映像,在重新打开pwa应用程序时不会触发应用程序的启动代码,而是从缓存加载应用程序。

那么,是否有可能为pwa获得一个onload类事件?

出于测试目的,我在app组件中添加了一些警告(),但在重新打开pwa应用程序时没有触发。

代码语言:javascript
复制
this.httpService.GetAppVersion(ver).subscribe(
        res => {
          if (res != null || res !== undefined) {
            this.version = res.versionNumber;
            ver = localStorage.getItem("appVersion");
            if (ver === null || ver === undefined) {
              localStorage.setItem("appVersion", "1.0");
              ver = "1.0";
            }

            let localVersion = ver.split(".");
            let incomingVersion = this.version.split(".");
            let result = this.helperService.compareVersion(
              localVersion,
              incomingVersion
            );
            //alert("result : " + result);
            if (result === 1) {
              const snackBarRef = this.snackBar.open(
                "New version available. Load New Version?",
                "Yes",
                { duration: 50000000 }
              );
              snackBarRef.afterDismissed().subscribe(() => {
                console.log("The snack-bar was dismissed");
              });
              snackBarRef.onAction().subscribe(() => {
                localStorage.setItem("appVersion", this.version.toString());
                this.helperService.Update(); // which clears the cache
                setTimeout(() => {
                  window.location.reload(true);
                }, 500);
              });
            }
          }
        },
        error => {
          alert("http error" + JSON.stringify(error));
        }
      );

至少,每当应用程序关闭后重新打开时,应用组件的构造函数中的代码都会执行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-09 01:21:15

Stack Overflow用户

发布于 2021-01-30 14:33:55

我知道这个问题很老,但是我现在所做的(因为我不太喜欢这个问题)是将版本存储在服务工作代码中。

然后,当window.onload触发时,主JavaScript代码向服务工作者发送一条消息(使用postMessage()),服务工作人员用版本号进行回复。

这不完全是你所需要的,但它是一个近似。

不过,正如我所说的,我正在寻找一种更好、更可维护的方法。如果我找到一个,我会张贴在这里,以防万一有人在搜索(就像我一样)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55545688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档