Мобильное веб-приложение не очищает кэш должным образом - PullRequest
34 голосов
/ 01 декабря 2011

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

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

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

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

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

Ответы [ 10 ]

11 голосов
/ 22 июня 2012

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

8 голосов
/ 03 мая 2013

У меня есть решение!

Но сначала проблема: 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

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

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

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

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

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

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

6 голосов
/ 02 ноября 2014

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

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

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

2 голосов
/ 28 июня 2014

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

Для этого вам нужно разрешить Web Inspector на вашем устройстве iOS. Выберите «Настройки»> «Safari»> «Дополнительно»> «Веб-инспектор» (он должен быть активным) И вы должны активировать меню разработчика на вашем компьютере Safari. Выберите «Настройки»> «Дополнительно»> «Активировать разработчика»

  1. Подключите устройство к компьютеру с помощью USB-кабеля
  2. Перейдите в safari> Разработка> Имя вашего устройства> Проверить приложение (приложение должно быть запущено)
  3. Откроется инспектор на вашем компьютере для веб-приложения.
  4. Пока инспектор открыт Очистить кеш (команда + alt + E)
  5. С открытым инспектором обновите страницу на вашем компьютере (команда + R)

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

2 голосов
/ 01 февраля 2012

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

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

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

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

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

1 голос
/ 29 октября 2012

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

1 голос
/ 09 декабря 2011

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

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

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

0 голосов
/ 19 апреля 2017

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

?v1
?x2
?z3

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

0 голосов
/ 08 апреля 2012

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

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

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

0 голосов
/ 08 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...