настраиваемое управление версиями PWA - PullRequest
2 голосов
/ 06 апреля 2019

Есть возможность получить событие onload для приложения pwa в целом.Я имел в виду, что мы реализовали пользовательскую логику управления версиями, чтобы сохранить версию приложения на основе поля базы данных (т.е. очистить кэш рабочего сервиса).Проблема здесь в том, что логика почти работает, но когда в базе данных обновляется новая версия, нам нужно очистить кэш соответствующего браузера, чтобы запустить обновление.В ходе дальнейших исследований я обнаружил, что когда приложение pwa открывается, оно сохраняет некий образ кэша, при повторном открытии приложения pwa не будет запускаться код запуска приложения, а загружается приложение из кэша.

Так можно ли получить событие загрузки типа pwa?

В целях тестирования я добавил несколько 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));
        }
      );

по крайней мере код в конструкторе компонента приложения будет выполняться каждый раз, когда приложение открывается после закрытия.

1 Ответ

0 голосов
/ 09 апреля 2019
...