我正在编写一个离线网络应用程序。
我有一个应用程序缓存的 list 文件。我有 appCache 事件的处理程序。 我想检测正在下载的文件是第一次下载还是正在更新。因为如果它们正在更新,我想阻止我的应用程序代码运行,因为我会在更新我的应用程序后刷新浏览器。
我的具体问题是,当“检查”事件被触发时,applicationCache 状态已经是“正在下载”,
有人知道如何在下载任何 list 或文件之前获取 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);
最佳答案
根据specification checking
事件始终是第一个事件。
the user agent is checking for an update, or attempting to download the manifest for the first time. This is always the first event in the sequence.
我认为刷新浏览器是错误的,因为刷新浏览器不会自动获取新副本。如果你看MDN guide对于使用 applicationCache
,您会发现文件始终首先从 applicationCache 加载,然后继续执行您试图通过刷新来避免的事件循环。
您应该简单地正确使用 applicationCache
事件生命周期来初始化和启动您的应用程序,而不是刷新。
i would like prevent my application code from running, since i will refresh the browser after updating my app.
您可以充分控制应用程序何时开始运行,如果您确实想刷新浏览器,只需在 updateready
或 noupdate
事件之后启动应用程序即可,但实际上您应该使用 window.applicationCache.swapCache
而不是刷新相反。
我找到了这个question and answer有用。
关于javascript - 如果正在更新应用程序缓存,则阻止 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241217/