HTML 5 AppCache контролируемое пользователем обновление - PullRequest
3 голосов
/ 30 мая 2011

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

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

У меня есть cache.manifest с каждым файлом в нем, и номер версии автоматически изменяется при обновлении в верхней части комментария.

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

Спасибо!

1 Ответ

3 голосов
/ 30 мая 2011

Как остановить обновление приложения?

Когда приложение находится в автономном режиме, оно остается в кэше, пока не произойдет одно из следующих событий:

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

http://www.html5rocks.com/tutorials/appcache/beginner/#toc-updating-cache

Вкратце: не изменяйте файл манифеста.

Как обновить файл манифеста для каждого пользователя индивидуально?

Если пользователь посещает веб-сайт в первый раз, его браузер загружает текущий манифест, поэтому мы будем использовать динамический URL и динамически генерировать файл манифеста:

<html manifest="manifest.php?version=2">

Браузер запоминает URL manifest.php?version=2, и каждый раз сгенерированный файл манифеста остается неизменным, поэтому браузер не обновляется (файл манифеста не изменяется). Файл сценария будет выглядеть так:

<?php

    header ( "Content-Type: text/cache-manifest" ) ;

    echo "CACHE MANIFEST\n\n" ;

    echo "# version " . $_GET [ "version" ] . "\n" ;

    echo "index.php\n" ;
    echo "styles.css\n" ;
    echo "scripts.js\n" ;

?>      

Теперь, как заставить браузер загружать манифест из другого URL, например manifest.php?version=5?

Я пытался изменить manifest атрибут содержимого и позвонить window.applicationCache.update() но браузер запрашивает файл манифеста со старого URL.

Другой способ может быть:

  • спросить пользователя, хочет ли он / она обновить;
  • если да, то сохранить cookie ("wish_to_update = 1");
  • в manifest.php прочитайте cookie и проверьте, желает ли пользователь обновить;

в manifest.php:

if ( $_COOKIE [ "wish_to_update" ] == "1" )
{
    // generate modified version
    echo "# version another than in your URL" ;
    setcookie ( "wish_to_update", "0" ) ;
 }
 else
 {
    // generate unmodified version
    echo "# version " . $_GET [ "version" ] . "\n" ;
 }
  • измененный файл манифеста заставит браузер снова загрузить все ресурсы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...