versioning - 自定义 PWA 版本管理

标签 versioning angular7 progressive-web-apps onload-event

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

那么是否有可能为 pwa 获得 onload 类型的事件?

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

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));
        }
      );

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

最佳答案

关于versioning - 自定义 PWA 版本管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545688/

相关文章:

javascript - sw 预缓存 - 从不同域加载 Assets 的运行时缓存

ionic-framework - ionic 3将应用程序发布为PWA(渐进式Web应用程序)

svn - 如何对可能无法按顺序完成的并行开发的里程碑进行版本控制?

iphone - 手动核心数据版本控制

angular - `this.appInits[i] is not a function` 错误发生在 `APP_INITIALIZER`

angular7 - 为 Angular 7 中的特定组件生成单独的构建文件

css - 如何基于媒体查询动态传值

google-chrome - Chrome DevTools 中缺少 "Add to homescreen"链接

对测试用例进行版本控制

php - 在项目之间共享自定义 PHP 代码的最佳方式