Как заставить веб-приложение с закладкой на домашнем экране iPad обновляться? - PullRequest
28 голосов
/ 09 января 2012

Я столкнулся с проблемой, когда я добавляю веб-приложение на домашний экран своего iPad (iOS 5.0.1 iPad 2), и когда я открываю его, кажется, что оно кеширует что-то за кулисами, независимо от Safari.

Я удалил из Safari все, что доступно в Настройках (Очистить историю и Очистить файлы cookie и данные), и когда я перехожу к веб-приложению с помощью Safari, я вижу приложение в его текущем состоянии. Однако, если я открою закладку на главном экране, я получу приложение в предварительно измененном состоянии.

Я видел много информации об использовании cache.manifest для кэширования ресурсов для автономного использования, но я не уверен, имеет ли это отношение к этому, поскольку я хотел бы с точностью до наоборот: ничего не кэшировать.

Я вышел на уровень даже не тестируя внешние ресурсы; если я изменю произвольную строку теста в элементе body моего index.html, в закладке главного экрана не будет отображаться обновленный текст.

Ответы [ 8 ]

24 голосов
/ 02 апреля 2012

Другим обходным решением является добавление? V = 1 к ссылкам Javascript и CSS. Например:

<link rel="stylesheet" type="text/css" media="all" href="./css/ipad.css?v=1">    
<script src="./js/ipad.js?v=1"></script>

Кажется, не нужно обновлять номер, когда ваш файл изменился, насколько я могу судить. По-видимому, на iPad 2 с установленным последним обновлением программного обеспечения достаточно просто намекнуть на что-то динамическое.

11 голосов
/ 02 мая 2014

Создайте cache.manifest, который инструктирует его никогда не кэшировать ресурсы, на которые ссылается главная html-страница:

CACHE MANIFEST

# Version 1.0000

NETWORK:
*

Используйте его в своих index.html:

<!DOCTYPE html>
<html manifest="cache.manifest">

Теперь всякий раз, когдаВы изменяете этот файл манифеста - например, увеличивая номер версии в этом комментарии - браузер также перезагружает index.html.

Убедитесь, что ваша страница перезагружается при обновлении кэша:

<script>
function updateSite(event) {
    window.location.reload();
}
window.applicationCache.addEventListener('updateready', updateSite, false);
</script>

В библиотеке разработчиков Safari имеется хорошая документация .

5 голосов
/ 24 января 2013

Для наших приложений для веб-клипов на iOS мы используем следующее.Пока что нет проблем с кешем:

1 - у нас есть один файл манифеста кеша с именем 'manifest.appcache.php'

<?php
    header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
    header('Content-type: text/cache-manifest'); 
?>

CACHE MANIFEST

CACHE:
# Don't cache anything
FALLBACK:
# Nothing
NETWORK:
# Request everything from server
*

2 - в файле HTML у нас есть:

<!DOCTYPE html>
<html lang="en" manifest="manifest.appcache.php">
    <head>
...
5 голосов
/ 10 января 2012

Кажется, я нашел обходной путь:

Новая версия сайта появляется только при изменении файла index.html.
(первый загружаемый файл)

Есливы выходите из index.html и изменяете только некоторые js в других файлах, тогда сайт не загружает новую версию.

2 голосов
/ 17 октября 2016

Вы можете принудительно перезагрузить открытое веб-приложение, не используя кеш, если у вас открыт Safari Web Inspector, указывающий на ваше открытое веб-приложение.С активным веб-инспектором нажмите SHIFT + COMMAND + R (на Mac).Возможно, вам придется обновить еще раз, чтобы активировать обновленные ресурсы.

2 голосов
/ 27 августа 2015

У меня есть угловое приложение, которое я разрабатываю, и столкнулось с этой проблемой при попытке протестировать его на iPad.Добавив бессмысленный запрос в конец URL, я смог получить текущую версию всех ресурсов.

www.somesite.com? Senselessquery

1 голос
/ 16 января 2015

Мне повезло с выключением устройства.Я изменил манифест приложения;но, по-видимому, вам нужно обновить или что-то еще, чтобы браузер искал его.Поскольку я удалил браузер Chrome, там нет кнопки сброса.Мы попытались «закрыть» приложение (ха-ха) и убрать приложение;но я полагаю, iOS все равно будет поддерживать работоспособность.Выключение сделало трюк, чтобы заставить его обновиться.

Может быть, есть какой-то жест для обновления, я не знаю.Возможно, следует заправить небольшую кнопку обновления «проверить наличие обновлений» в кэшированные веб-приложения.

0 голосов
/ 05 февраля 2019

В последних инструментах разработчика Safari (v12.0.1) есть кнопка «Игнорировать кэш ресурсов» в правом верхнем углу вкладки «Сеть». Проверьте это, затем перезагрузите.

...