Автономное веб-приложение для iOS не может загрузить новый контент после обновления до iOS7
У меня есть приложение JavaScript, которое я запускаю в автономном режиме (добавлено на домашний экран) на iPad.
Я обновил iOS 6 до iOS 7, и теперь мое приложение всегда загружает один и тот же контент, оно продолжает кэшироваться. Даже если я загружаю свои файлы JS и CSS динамически при каждой загрузке приложения с уникальной отметкой времени в качестве параметра. Мне нужно было это, чтобы быть уверенным, что файлы JS и CSS не кэшируются, и это работает в iOS 6.
Я попробовал следующее:
удаление приложения с главного экрана
удаление файлов cookie и данных сайта
перезапуск iPad
я имел
manifest="manifest.appcache"
удалил это (затем повторил попытку с 1 по 3)Я добавил следующие метатеги
<meta http-equiv="cache-control" content="no-cache">
а также<meta http-equiv="pragma" content="no-cache">
Так как я разрабатываю это локально, и эта страница обслуживается с моего настольного ПК, я попытался изменить IP своего ПК, а затем попытался с 1 по 3, но это не решило мою проблему.
Таким образом, все мои изменения не появляются, независимо от того, находятся ли они в файле HTML или JS.
Очевидно, есть некоторые изменения в том, как iOS обрабатывает автономные приложения. Что мне не хватает?
7 ответов
Похоже, что внесение изменений в файл манифеста (например, добавление номера версии) должно привести к перезагрузке приложения: Mobile Web App не очищает кэш должным образом
Вы должны добавить номер версии в ваши CSS и JS URL для решения проблем с кэшированием. например, file.css?v=2
Ура, Z.
Просто удалите ссылку на манифест в своем HTML. т.е. не используйте файл манифеста.
И пока вы это делаете, ваш файл манифеста подается с правильным mimetype?
Как насчет того, чтобы вручную обновить кеш, а затем перезагрузить страницу:
<script>
if(window.applicationCache) {
applicationCache.onnoupdate = function() { alert("debug: manifest not changed!") };
applicationCache.onupdateready = function() { location.reload() };
applicationCache.update();
}
</script>
Попробуйте удалить приложение с домашнего экрана, затем перейдите к URL-адресу приложения в Safari, но в конце своего URL-адреса в Safari добавьте что-то вроде ?v=2
, Затем нажмите "Перейти" и добавьте на главный экран. Это гарантирует, что вы получаете не кэшированную версию вашего css и javascript с сервера.
Вы также можете добавить случайное число в конце ваших вызовов JavaScript и CSS в вашем HTML. Это гарантирует, что все будущие запросы от приложения на домашнем экране получат некэшированные версии CSS и JavaScript.
Я нашел этот php-скрипт для вывода правильного файла manifest.cache в браузер
Я сделал некоторое время назад, может быть, это помогает.
он автоматически проверяет, изменены ли некоторые файлы, и заставляет браузер перезагрузить новый файл manifest.cache.
manifest.php
<?php
header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";
$hashes="";
$dir = new RecursiveDirectoryIterator(".");
foreach(new RecursiveIteratorIterator($dir) as $file){
if ($file->IsFile()&&$file!="./manifest.php"&&substr($file->getFilename(),0,1)!="."){
echo $file."\n";$hashes.=md5_file($file);
}
}
echo "NETWORK:\n";
echo "*\n";
echo "FALLBACK:\n";
echo "online.html fallback.html\n";
echo "# Hash: " . md5($hashes) . "\n";
?>
АТМ я не могу проверить на IOS 7
Попробуйте вручную очистить кеш. Вы можете сделать это через настройки.
Я нашел этот урок. Оказывается, ios7 хранит данные веб-сайта в другом месте, чем просто в разделе cookie и данных.
http://www.imore.com/how-clear-stored-website-data-ios-7-safari
- Запустите приложение "Настройки" на главном экране вашего iPhone или iPad.
- Прокрутите вниз и нажмите на Safari.
- Теперь пролистайте до конца и нажмите "Дополнительно".
- Нажмите на данные веб-сайта. Обратите внимание, что здесь вы можете увидеть, сколько места занимают данные на вашем сайте iPhone или iPad.
- Снова прокрутите вниз и нажмите "Удалить все данные веб-сайта".
- Подтвердите еще раз, что вы хотите удалить все данные.