一般情况下,可以获得pwa应用程序的onload事件。我的意思是我们实现了一个自定义版本控制逻辑,以便保持基于数据库字段的应用版本(即清除服务工作者缓存)。这里的问题是逻辑几乎可以工作,但是当数据库中更新一个新版本时,我们需要清除相应浏览器的缓存,以便触发更新。在更多的调查中,我发现一旦pwa应用被打开,它就会保留某种缓存映像,在重新打开pwa应用程序时不会触发应用程序的启动代码,而是从缓存加载应用程序。
那么,是否有可能为pwa获得一个onload类事件?
出于测试目的,我在app组件中添加了一些警告(),但在重新打开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));
}
);至少,每当应用程序关闭后重新打开时,应用组件的构造函数中的代码都会执行。
发布于 2019-04-09 01:21:15
发布于 2021-01-30 14:33:55
我知道这个问题很老,但是我现在所做的(因为我不太喜欢这个问题)是将版本存储在服务工作代码中。
然后,当window.onload触发时,主JavaScript代码向服务工作者发送一条消息(使用postMessage()),服务工作人员用版本号进行回复。
这不完全是你所需要的,但它是一个近似。
不过,正如我所说的,我正在寻找一种更好、更可维护的方法。如果我找到一个,我会张贴在这里,以防万一有人在搜索(就像我一样)。
https://stackoverflow.com/questions/55545688
复制相似问题