我正在撰写离线网络应用程序。
我的applicationCache有一个清单文件。我有appCache事件的处理程序。 我想检测下载的文件是第一次下载还是正在更新。因为如果他们正在更新,我想阻止我的应用程序代码运行,因为我会在更新我的应用程序后刷新浏览器。
我的具体问题是当“检查”事件被触发时,applicationCache状态已经是“DOWNLOADING”,
有人知道如何在下载任何清单或文件之前获取applicationCache.status吗?
提前感谢任何答案
window.applicationCache.addEventListener('checking', function (event) {
console.log("Checking for updates.");
console.log("inside checking event, appcache status : %s", applicationCache.status);
}, false);
window.applicationCache.addEventListener('updateready', function (e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
// Browser downloaded a new version of manifest files
window.location.reload();
}
}, false);
window.applicationCache.addEventListener('downloading', function (event) {
appCommon.information("New version available", "Updating application files...", null, null);
}, false);
window.applicationCache.addEventListener('progress', function (event) {
$("#informationModal").find(".modal-body").html("Updating application files... " + event.loaded.toString() + " of " + event.total.toString());
}, false);
window.applicationCache.addEventListener('cached', function (event) {
$("#informationModal").find(".modal-body").html("Application up to date.");
setTimeout(function () { $("#informationModal").find(".close").click(); }, 1000);
}, false);
答案 0 :(得分:1)
根据specification,checking
事件始终是第一个事件。
用户代理正在检查更新,或者是第一次尝试下载清单。 这始终是序列中的第一个事件。
我认为刷新浏览器是错误的,因为它不会自动获取新副本。如果您查看使用applicationCache
的{{3}},您将看到始终首先从applicationCache加载文件,然后通过刷新继续完成您试图避免的事件循环。
应该只是正确使用applicationCache
事件生命周期,而不是刷新,以便初始化和启动应用程序。
我想阻止我的应用程序代码运行,因为我会在更新我的应用程序后刷新浏览器。
您可以很好地控制应用程序何时开始运行,如果您真的想要刷新浏览器,只需在updateready
或noupdate
事件后启动应用程序,但实际上不是刷新您似乎应该使用MDN guide代替。
我发现这个window.applicationCache.swapCache
很有用。