通常可以获取pwa应用程序的onload事件。我的意思是我们已经实现了自定义版本控制逻辑,以便根据数据库字段保持应用程序版本。(即清除服务工作者缓存)。这里的问题是逻辑几乎可以工作,但是一旦数据库中更新了新版本,那么我们就需要清除相应浏览器的缓存以触发更新。在更多调查中,我发现当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));
}
);
每次关闭后重新打开应用程序时,至少将执行应用程序组件构造函数中的代码。
答案 0 :(得分:1)
我知道这个问题很老了,但是我现在正在做的(我正在努力寻找更好的方法,因为我不太喜欢这个方法)将版本存储在服务工作线程代码中。< /p>
然后,当 window.onload
触发时,主要的 JavaScript 代码会向 Service Worker 发送一条消息(使用 postMessage()
),Service Worker 会回复版本号。
这不是完全您需要的,而是一个近似值。
不过,正如我所说,我正在寻找一种更好、更易于维护的方法。如果我找到了,我会把它贴在这里,以防万一有人在搜索这个(就像我一样)。
答案 1 :(得分:0)