HTML5 автономный appcache: принудительное обновление всего контента?
Мое маленькое приложение HTML5 необходимо повторно развернуть на сервере. Я понял, что мне нужно было только прикоснуться к файлу.appcache, чтобы каждый браузер обновлял последнюю версию файлов при следующем посещении.
Манифест выглядит так:
CACHE MANIFEST
#Version: 201209251353
index.html
apple-touch-icon.png
css/styles.css
data/dump.bin
img/background.png
img/sprites.png
js/core.js
js/jquery-1.8.1.min.js
vid/walkthrough.mov
Чтобы "потрогать", я добавил комментарий (#Version:), который я имею в виду, чтобы он обновлялся при каждом изменении содержимого.
Странно, некоторые файлы обновляются. Не все, например, коллега получает последний файл core.js, но по-прежнему отображает старый файл walkthrough.mov.
Существует ли простой механизм принудительного обновления всех файлов из кеша?
Я нашел следующий код на SO и включил его в скрипты, ожидая, что он поможет. Не уверен, насколько это необходимо:(
// Application cache refresh
window.addEventListener('load', function(e) {
window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
// Browser downloaded a new app cache.
// Swap it in and reload the page to get the new hotness.
window.applicationCache.swapCache();
if (confirm('A new version of this site is available. Load it?')) {
window.location.reload();
}
} else {
// Manifest didn't changed. Nothing new to server.
}
}, false);
}, false);
2 ответа
Какие заголовки истечения срока действия вы устанавливаете в своем манифесте и контенте?
Если вы установили (например) срок действия vid/walkthrough.mov
будет через месяц, и этот файл будет достаточно маленьким, чтобы помещаться в кеш браузера (примечание: не кеш приложения), тогда браузер будет обновлять кэш приложения из версии в кеше браузера, а не запрашивать его по сети снова (если прошло менее месяца с момента получения файла).
Если вы указали дату окончания срока действия файла манифеста, то в некоторых версиях некоторых браузеров это может привести к тому, что обновленный манифест не будет обнаружен.
Другое решение, которое я использую, но не очень приятное, - переименовать файл appcache. Тогда весь контент будет обновлен, так как appcache будет потерян.