Подтвердить что ты не робот

Приложение Mobile Web не очищает кеш

Я разрабатываю мобильное веб-приложение для iPad, и у меня возникла проблема при тестировании моего кода.

Иногда и, казалось бы, случайным образом iPad перестает правильно обновлять все библиотеки JS, которые я написал. После обновления кода и публикации изменений я увижу, что некоторые файлы будут правильно обновлены, а другие - нет. Это сохранение сохраняется после многократного очищения кеша, силовых циклов и Wi-Fi.

Если я загружаю приложение в сафари, у меня нет проблем с ним, но когда я загружаюсь из значка рабочего стола приложения, проблема снова появляется. Я проделал простые тесты, такие как добавление строки оповещения в библиотеку, и что предупреждение срабатывает без каких-либо проблем, кроме как в окне мобильного веб-приложения. Затем, казалось бы, случайным образом, проблема исчезает, иногда это занимает 5 минут, иногда это занимает час.

Я вижу это поведение независимо от того, использует ли приложение файл манифеста или нет. Я также попытался очистить эти устаревшие файлы, обновив файл манифеста, чтобы заставить recache таким образом, но проблема все еще сохраняется.

Кто-нибудь знает, если это известная проблема с iPad? Есть ли что-нибудь на моем конце, которое можно сделать для решения этой проблемы?

4b9b3361

Ответ 1

Для меня решение добавляет ?v=1 в конце всех ваших ссылок Javascript и CSS. Я пробовал все, прежде чем видеть это на другом посту Stackoverflow, и он работал напрямую!!! Было время...

Ответ 2

Я получил решение!

Но сначала проблема: iPad и iPhone не обновляют кеш при открытии приложения. Даже удаление приложения, очистка кеша Safari, перезапуск устройства и т.д. И т.д. Не работает.

И вот решение... taadaa!

Ваш файл манифеста ДОЛЖЕН меняться. Если он будет изменен, iPad/iPhone перезагрузит кеш. Так что просто напишите номер версии в вашем файле манифеста и измените его, когда вы что-то изменили:

# Version: 1.2

Таким образом, полный файл манифеста может выглядеть так:

CACHE MANIFEST

# Version 1.5

NETWORK:
*

CACHE:
index.html
jquery-1.7.2.min.js
images/logo.jpg

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

Btw. не забудьте проверить свой файл манифеста http://manifest-validator.com

Мой источник - это очень круто, как об автономных веб-приложениях: http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/

В нем также говорится, что вам может понадобиться дважды запустить приложение:

Если манифест был обновлен, браузер загрузит все файлы в списке кешированных файлов, НО, исходное содержимое уже загрузится в этот момент (помните, что он уже кэширован, поэтому он загружает супер быстро!).

Но это сработало для меня всегда с первой попытки.

Ответ 3

Работайте над этой проблемой. Добавьте ссылку на веб-приложение, как...

<a href="javascript:top.frames.location.reload();">refresh</a>

Он работает так же, как кнопка перезагрузки в адресной строке браузера iPhone/iPad Safari!

Ответ 4

Я потратил несколько часов, пытаясь исправить эту проблему, и кажется, что файл манифеста, который должен управлять кэшированием файлов, сам может быть кэширован, оставив ваше веб-приложение в неопределенности.

В моем случае я не хотел ничего кэшировать. Вот как я решил проблему:

  • Включить модуль Apache mod_expires на моем сервере
  • Создайте файл .htaccess в том же каталоге, что и индексный файл. Файл должен содержать строку ExpiresDefault A1.

Это сообщает серверу, что каждый файл должен истекать через секунду после его доступа. Мое веб-приложение используется как опрос в студенческих соглашениях, поэтому только один человек использует его одновременно. Мое решение работает для меня; вам может потребоваться настроить его дальше, чтобы он вам подходит.

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

Ответ 5

Я не могу проверить корректность очистки кэша, но это сработало для меня:

Чтобы сделать это, вам нужно разрешить веб-инспектору на вашем устройстве iOS. Перейдите в "Настройки" > "Safari" > "Дополнительно" > "Веб-инспектор" (он должен быть активным) И вам нужно активировать меню разработчика на вашем компьютере Safari. Перейдите в меню "Настройки" > "Дополнительно" > "Активировать приложение"

  • Подключите устройство к компьютеру с помощью кабеля USB
  • Перейдите в Safari > Developpement > Имя вашего устройствa > Осмотрите приложение (приложение должно быть запущено)
  • Откроется инспектор на вашем компьютере для веб-приложения.
  • Пока открыт инспектор Очистить кеш (команда + alt + E)
  • Если инспектор по-прежнему открывает обновленную страницу на вашем компьютере (команда + R)

Как-то кэш Webapp очистился, и я получил не кешированный код.

Ответ 6

У меня такая же проблема с моими веб-приложениями на iPad - иногда наугад, веб-приложение, работающее в автономном режиме, не будет обновлять определенный ресурс (файл HTML/CSS/JS), несмотря на то, что он убивает все возможные приложение, очистка кеша и истории Safari, перезагрузка, перезапуск wifi-соединения, обновление или удаление файла manifest или установка устройства в микроволновую печь; даже применение кувалды оказалось тщетным.

Пока я не нашел "кошерный" способ его исправить, всегда существует обходное решение - переименовать ресурс.

Просто измените имя не обновляющегося файла. Если у вас есть проблема, скажем, foobar.js не обновлять, переименуйте его в foobar2.js и обновить ссылки на этот ресурс в других файлах. Конечно, это может быть болью в том, что вы знаете, что (особенно, когда после недели стоит развития, вы находитесь в foobar12.js), но пока мы не увидим официальное исправление для iOS или работающей техники освежения, это единственный способ, которым я знаю для его запуска и работы.

Ответ 7

включение и выключение ipad для меня - по крайней мере, на ios 5. не полностью выключено, просто используйте кнопку сна в верхней части ipad, а затем кнопку дома, чтобы снова включить ее. добавление номера версии в конце файлов также работает, но это становится довольно утомительным.

Ответ 8

Я много дней работал над этой проблемой. Это выглядело как ошибка рендеринга из-за некоторых случайных изменений, которые я сделал в CSS и HTML, тем самым помещая кнопки в случайных местах на экране, что делает приложение непригодным.

Я определил, что CSS был кэширован, после нескольких дней выталкивания и подталкивания, и, наконец, попробовал переименовать файлы, о чем-то говорит @Neo. Я также изменил управление кешем в моем файле .htaccess, так как я использовал старый .htaccess, который инструктировал браузер кэшировать в течение года.

tl; dr: Удалить кеш-контроль (mod_expires и mod_headers) для ваших файлов webapp и просто используйте кэш-манифест, если вы еще этого не сделали. Затем переименуйте файлы и обновите ссылки в своем HTML, и вы должны быть хорошими.

Ответ 9

У меня была такая же проблема.

Я попробовал различные предложения здесь и добавил управление кешем без везения. Я попытался переименовать файл, который отказался обновлять, не повезло. Я попытался добавить манифест кэша (у меня был один, но удалил его), не повезло. И я пробовал все обычные вещи: удалять приложение, очищать кеш, перезагружать, переустанавливать приложение, не повезло.

Единственное, что сработало для меня, было переименование виртуального каталога на моем веб-сервере. Это не может быть жизнеспособным решением для всех, но, к счастью, это не было проблемой, поскольку я тестирую локальный сервер IIS.

Ответ 10

Чтобы исправить эту проблему, вы должны добавить новые буквы с цифрами (а не только цифры) до конца ссылки:

?v1
?x2
?z3

И каждый раз, когда вы хотите обновить свой script, вы должны добавить разные буквы и цифры (нужны разные буквы, потому что сегодня многие мобильные браузеры игнорируют все чистые номера в конце Javascript/CSS.)