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

标签 javascript ajax manifest application-cache

我正在编写一个离线网络应用程序。

我有一个应用程序缓存的 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.

您可以充分控制应用程序何时开始运行,如果您确实想刷新浏览器,只需在 updatereadynoupdate 事件之后启动应用程序即可,但实际上您应该使用 window.applicationCache.swapCache 而不是刷新相反。

我找到了这个question and answer有用。

关于javascript - 如果正在更新应用程序缓存,则阻止 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241217/

相关文章:

javascript - 使用 jQuery 在 AJAX 删除方法后自动将文本添加到 div

java - 测试 Ajax - 在 Apache Wicket 中提交表单

java - Android 中的软键盘挤压文本编辑框

java - 没有主要 list 属性,在 jar 中

javascript - 如何在 MVC 应用程序中使用 JWT,其中使用 IdentityServer4 的某些 javascript 部分

php - jQuery 图像 slider 问题

javascript - 谷歌地图、SQL、XML、Ajax 天哪!

android - Playstore:在Android Studio list 中制作的应用的 “0 devices supported”和

JavaScript - 使用 Document Write 输出一行

javascript - 如何在 Bootstrap 的附加组件后显示 jQuery Validate 错误消息?