如果正在更新应用程序缓存,则阻止ajax调用

时间:2014-10-07 16:55:00

标签: javascript ajax manifest application-cache

我正在撰写离线网络应用程序。

我的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);

1 个答案:

答案 0 :(得分:1)

根据specificationchecking事件始终是第一个事件。

  

用户代理正在检查更新,或者是第一次尝试下载清单。 这始终是序列中的第一个事件。

我认为刷新浏览器是错误的,因为它不会自动获取新副本。如果您查看使用applicationCache的{​​{3}},您将看到始终首先从applicationCache加载文件,然后通过刷新继续完成您试图避免的事件循环。

应该只是正确使用applicationCache事件生命周期,而不是刷新,以便初始化和启动应用程序。

  

我想阻止我的应用程序代码运行,因为我会在更新我的应用程序后刷新浏览器。

您可以很好地控制应用程序何时开始运行,如果您真的想要刷新浏览器,只需在updatereadynoupdate事件后启动应用程序,但实际上不是刷新您似乎应该使用MDN guide代替。

我发现这个window.applicationCache.swapCache很有用。