缓存清单手动更新



我想让用户能够选择是否要更新我的 Web 应用程序。根据我的研究,缓存清单在找到修改后的appcache文件后立即自动触发"正在下载"事件。目标是在用户首次加载我的应用时保持此行为,但如果用户缓存中已有旧版本,他或她将收到确认框:

An update is available. Do you want to download it?
Ok
Cancel
单击"确定"将触发"下载"事件,

而单击"取消"将触发"noupdate"事件,跳过下载。

我该怎么做?

我不相信您正在寻找的确切行为是可能的。

由于 JavaScript 被有效地加载到页面中,它总是在 appcache 魔术发生后(或当)执行。

用户第一次访问该页面时,浏览器会看到有一个manifest属性。页面和所有服务器资源将继续正常加载,浏览器将在后台下载并缓存manifest文件中指定的所有资源。

用户下次访问该页面时,它首先检查清单是否已更新或清单的任何缓存标头是否已过期。如果清单是新的,它将下载更新的缓存并向用户显示版本。在用户刷新页面之前,不会显示新版本。因此,当页面加载并提示用户时,新的应用程序缓存已经下载。

试试这个实验。使用缓存清单创建基本的简单 html 页面。在标题中包含以下内容:

<script>
var cache = window.applicationCache,
    handleEvent = function(event) {
        console.log("appcache event fired.");
    };
cache.addEventListener('checking', handleEvent);
cache.addEventListener('downloading', handleEvent);
cache.addEventListener('progress', handleEvent);
cache.addEventListener('cached', handleEvent);
cache.addEventListener('noupdate', handleEvent);
cache.addEventListener('updateready', handleEvent);
cache.addEventListener('obsolete', handleEvent);
cache.addEventListener('error', handleEvent);
</script>

观看 Chrome 开发者控制台。请注意,此处的所有事件处理程序都是 Chrome 记录浏览器的内置事件处理程序后触发的。

您可以尝试在服务器上检测缓存清单是否已更改。如果是这种情况,请不要将用户定向到主页,而是重定向到将包含提示的其他页面。如果用户想要更新的版本,请照常继续。如果没有,则需要截获对应用程序缓存的请求并返回 304(未修改)。

这是一个很好的资源。

相关内容

  • 没有找到相关文章

最新更新