Ответ 1
Для меня решение добавляет ?v=1
в конце всех ваших ссылок Javascript и CSS.
Я пробовал все, прежде чем видеть это на другом посту Stackoverflow, и он работал напрямую!!! Было время...
Я разрабатываю мобильное веб-приложение для iPad, и у меня возникла проблема при тестировании моего кода.
Иногда и, казалось бы, случайным образом iPad перестает правильно обновлять все библиотеки JS, которые я написал. После обновления кода и публикации изменений я увижу, что некоторые файлы будут правильно обновлены, а другие - нет. Это сохранение сохраняется после многократного очищения кеша, силовых циклов и Wi-Fi.
Если я загружаю приложение в сафари, у меня нет проблем с ним, но когда я загружаюсь из значка рабочего стола приложения, проблема снова появляется. Я проделал простые тесты, такие как добавление строки оповещения в библиотеку, и что предупреждение срабатывает без каких-либо проблем, кроме как в окне мобильного веб-приложения. Затем, казалось бы, случайным образом, проблема исчезает, иногда это занимает 5 минут, иногда это занимает час.
Я вижу это поведение независимо от того, использует ли приложение файл манифеста или нет. Я также попытался очистить эти устаревшие файлы, обновив файл манифеста, чтобы заставить recache таким образом, но проблема все еще сохраняется.
Кто-нибудь знает, если это известная проблема с iPad? Есть ли что-нибудь на моем конце, которое можно сделать для решения этой проблемы?
Для меня решение добавляет ?v=1
в конце всех ваших ссылок Javascript и CSS.
Я пробовал все, прежде чем видеть это на другом посту Stackoverflow, и он работал напрямую!!! Было время...
Я получил решение!
Но сначала проблема: 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/
В нем также говорится, что вам может понадобиться дважды запустить приложение:
Если манифест был обновлен, браузер загрузит все файлы в списке кешированных файлов, НО, исходное содержимое уже загрузится в этот момент (помните, что он уже кэширован, поэтому он загружает супер быстро!).
Но это сработало для меня всегда с первой попытки.
Работайте над этой проблемой. Добавьте ссылку на веб-приложение, как...
<a href="javascript:top.frames.location.reload();">refresh</a>
Он работает так же, как кнопка перезагрузки в адресной строке браузера iPhone/iPad Safari!
Я потратил несколько часов, пытаясь исправить эту проблему, и кажется, что файл манифеста, который должен управлять кэшированием файлов, сам может быть кэширован, оставив ваше веб-приложение в неопределенности.
В моем случае я не хотел ничего кэшировать. Вот как я решил проблему:
.htaccess
в том же каталоге, что и индексный файл. Файл должен содержать строку ExpiresDefault A1
.Это сообщает серверу, что каждый файл должен истекать через секунду после его доступа. Мое веб-приложение используется как опрос в студенческих соглашениях, поэтому только один человек использует его одновременно. Мое решение работает для меня; вам может потребоваться настроить его дальше, чтобы он вам подходит.
В прошлом эта проблема представлялась, казалось бы, случайным образом. Все мое недавнее тестирование показало, что оно отвечает, как и следовало ожидать.
Я не могу проверить корректность очистки кэша, но это сработало для меня:
Чтобы сделать это, вам нужно разрешить веб-инспектору на вашем устройстве iOS. Перейдите в "Настройки" > "Safari" > "Дополнительно" > "Веб-инспектор" (он должен быть активным) И вам нужно активировать меню разработчика на вашем компьютере Safari. Перейдите в меню "Настройки" > "Дополнительно" > "Активировать приложение"
Как-то кэш Webapp очистился, и я получил не кешированный код.
У меня такая же проблема с моими веб-приложениями на iPad - иногда наугад, веб-приложение, работающее в автономном режиме, не будет обновлять определенный ресурс (файл HTML/CSS/JS), несмотря на то, что он убивает все возможные приложение, очистка кеша и истории Safari, перезагрузка, перезапуск wifi-соединения, обновление или удаление файла manifest
или установка устройства в микроволновую печь; даже применение кувалды оказалось тщетным.
Пока я не нашел "кошерный" способ его исправить, всегда существует обходное решение - переименовать ресурс.
Просто измените имя не обновляющегося файла. Если у вас есть проблема, скажем, foobar.js
не обновлять, переименуйте его в foobar2.js
и обновить ссылки на этот ресурс в других файлах. Конечно, это может быть болью в том, что вы знаете, что (особенно, когда после недели стоит развития, вы находитесь в foobar12.js
), но пока мы не увидим официальное исправление для iOS или работающей техники освежения, это единственный способ, которым я знаю для его запуска и работы.
включение и выключение ipad для меня - по крайней мере, на ios 5. не полностью выключено, просто используйте кнопку сна в верхней части ipad, а затем кнопку дома, чтобы снова включить ее. добавление номера версии в конце файлов также работает, но это становится довольно утомительным.
Я много дней работал над этой проблемой. Это выглядело как ошибка рендеринга из-за некоторых случайных изменений, которые я сделал в CSS и HTML, тем самым помещая кнопки в случайных местах на экране, что делает приложение непригодным.
Я определил, что CSS был кэширован, после нескольких дней выталкивания и подталкивания, и, наконец, попробовал переименовать файлы, о чем-то говорит @Neo. Я также изменил управление кешем в моем файле .htaccess, так как я использовал старый .htaccess, который инструктировал браузер кэшировать в течение года.
tl; dr: Удалить кеш-контроль (mod_expires и mod_headers) для ваших файлов webapp и просто используйте кэш-манифест, если вы еще этого не сделали. Затем переименуйте файлы и обновите ссылки в своем HTML, и вы должны быть хорошими.
У меня была такая же проблема.
Я попробовал различные предложения здесь и добавил управление кешем без везения. Я попытался переименовать файл, который отказался обновлять, не повезло. Я попытался добавить манифест кэша (у меня был один, но удалил его), не повезло. И я пробовал все обычные вещи: удалять приложение, очищать кеш, перезагружать, переустанавливать приложение, не повезло.
Единственное, что сработало для меня, было переименование виртуального каталога на моем веб-сервере. Это не может быть жизнеспособным решением для всех, но, к счастью, это не было проблемой, поскольку я тестирую локальный сервер IIS.
Чтобы исправить эту проблему, вы должны добавить новые буквы с цифрами (а не только цифры) до конца ссылки:
?v1
?x2
?z3
И каждый раз, когда вы хотите обновить свой script, вы должны добавить разные буквы и цифры (нужны разные буквы, потому что сегодня многие мобильные браузеры игнорируют все чистые номера в конце Javascript/CSS.)