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 будет потерян.

Другие вопросы по тегам