我正在开发一个具有离线模式的小型移动 Web 应用程序。 如果 list 文件已更改,有什么方法可以防止自动更新?如果用户的互联网连接不好,他不应该被迫下载所有文件,而是应该收到一条小消息,以便他可以稍后更新文件。
我试过了
window.addEventListener('load', function(e) {
window.applicationCache.addEventListener('ondownloading', function(e) {
window.applicationCache.abort();
}, false);
}, false);
但它不起作用。无论是在 Safari 6.0.2 还是在 Chrome Canary 中。
只有当用户使用以下代码手动点击我的“更新”按钮时,应用程序才应该更新文件:
var appCache = window.applicationCache;
appCache.update();
if (appCache.status == window.applicationCache.UPDATEREADY) {
appCache.swapCache(); // The fetch was successful, swap in the new cache.
}
最佳答案
Jaffa 的回答无效。 (至少在 chrome 中)。
无论我们做什么,appcache 都会自动更新,因此控制客户端何时从服务器获取更新的唯一方法是在每个客户端(每个浏览器)的基础上管理每个缓存 list 。
浏览器将需要创建一个 BrowserID GUID 并将其存储在 localStorage 中。当它请求缓存 list 时,它应该在 URL 中包含 browserID。当服务器发送缓存 list 时,它会将其缓存在服务器端。 list 的每个后续请求都会返回缓存的版本。
当用户按下“同步”按钮时,浏览器会发送一个包含浏览器 ID 的缓存清除请求。这会导致使用该 BrowserID 的下一个缓存 list 请求返回更新后的 list ,而不是缓存的版本。
关于HTML 5 缓存 : window. applicationCache.abort();不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13592382/