缓存清单手动更新

时间:2015-06-12 18:16:44

标签: javascript web-applications cache-manifest

我希望为用户提供选择是否要更新我的Web应用程序的功能。根据我的研究,缓存清单会自动触发"下载"一旦找到修改后的appcache文件,就会发生事件。目标是在用户第一次加载我的应用程序时保持此行为,但如果用户已在缓存中使用旧版本,则他或她将收到确认框:

An update is available. Do you want to download it?
Ok
Cancel

点击"确定"会解雇"下载"事件,同时点击"取消"会解雇" noupdate"相反,跳过下载。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

由于JavaScript被有效地加载到页面中,因此它将始终在appcache魔法发生之后(或同时)执行。

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

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

试试这个实验。使用缓存清单创建一个简单的简单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浏览器的内置事件处理程序后触发

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

This是一个很好的资源。