Полностью аннулировать кеш HTML5 (манифест)?

У меня есть веб-приложение для iPhone, и я хочу знать, как принудительно обновить кеш.

Мой манифест кеша таков:

CACHE MANIFEST
index.html
file1.css
file1.js

index.html — это ядро ​​приложения, поэтому я поместил его в кеш. На данный момент я, кажется, сбит с толку, так как не могу понять, как заставить iPhone аннулировать кеш. Даже переход на Settings > Safari > Clear Cache не работает, хотя хотелось бы программно управлять этим. Удаление index.html из манифеста и его повторное добавление, кажется, работает, но я должен знать, что все мои клиенты получили чистый доступ к обновленному манифесту.

Как кэшировать index.html и обновлять его при изменении?


person Stefan Kendall    schedule 31.07.2011    source источник


Ответы (3)


Внезапно любое изменение в манифесте поможет, а манифесты могут содержать комментарии, начинающиеся с #. Просто добавьте случайный комментарий, и он будет работать.

Это полезное свойство, когда я работал над приложением HTML5 в репозитории git, я автоматически регенерировал манифест с комментарием, содержащим хеш HEAD, после каждой фиксации, чтобы изменения всегда распространялись на пользователей.

person Jakub Wieczorek    schedule 31.07.2011
comment
Мое приложение тривиально, но я мог бы просто написать скрипт, чтобы добавить git log --oneline | cut -c -7 | head -1 в заголовок манифеста в качестве комментария. Это неплохая идея. - person Stefan Kendall; 01.08.2011
comment
Чтобы получить хэш фиксации, вы также можете сделать git log -1 --format="%h" - person Patrick Oscity; 21.06.2014

Похоже, в браузерах WebKit есть ошибка, не позволяющая им перезагружать веб-сайт при изменении манифеста, см. эта ссылка

Не знаю, как найти обходной путь, за исключением случаев, когда я напрямую вызываю index.html.

Нет никаких шансов, что iPad/iPhone-WebApp сделает эту работу...

person meee    schedule 19.07.2012

Да, вы можете использовать JavaScript, чтобы заставить Safari перезагрузить кэшированные файлы ресурсов.

Согласно Apple, изменение файла манифеста кеша приведет к тому, что Safari перезагрузит все измененные файлы ресурсов. Но эти повторно загруженные файлы не будут использоваться браузером, пока пользователь не посетит сайт во второй раз. Эта задержка может причинить боль, особенно во время разработки.

Чтобы заставить Safari немедленно перезагрузить содержимое кеша, Apple говорит, что вы может использовать этот JavaScript для управления объектом applicationCache:

function updateSite(event) {
    window.applicationCache.swapCache();
}
window.applicationCache.addEventListener('updateready', updateSite, false);
person terrymorse    schedule 11.12.2015