JavaScript. Подробное руководство, 6-е издание, стр. 342

<b>    progress = &quot; (&quot; + ++progresscount + &quot;)&quot;</b>

<b>  status(&quot;Загружается новая версия&quot; + progress);</b>

<b>  return false;</b>

<b>}</b>

<b>// Когда приложение впервые загружается в кэш, по окончании загрузки</b>

<b>// броузер сгенерирует событие &quot;cached&quot;,</b>

<b>window.applicationCache.oncached = function() {</b>

<b>  status(&quot;Приложение загружено и установлено локально&quot;);</b>

<b>  return false;</b>

<b>};</b>

<b>// Когда обновляется приложение, находящееся в кэше, то по завершении загрузки</b>

<b>// броузер сгенерирует событие &quot;updateready&quot;. Обратите внимание, что при этом</b>

<b>// пользователь по-прежнему будет работать со старой версией приложения, </b>

<b>window.applicationCache.onupdateready = function() {</b>

<b>  status(&quot;Была загружена новая версия приложения. Перезапустите его.&quot;);</b>

<b>  return false;</b>

<b>};</b>

<b>// Если броузер выполняется в автономном режиме и файл объявления не может</b>

<b>// быть проверен, генерируется событие &quot;error&quot;. Это же событие генерируется,</b>

<b>// когда некэшированное приложение ссылается на отсутствующий файл объявления, </b>

<b>window.applicationCache.onerror = function() {</b>

<b>  status(&quot;Невозможно загрузить файл объявления &quot; +</b>

<b>         &quot;или сохранить приложение в кэш&quot;);</b>

<b>  return false;</b>

<b>};</b>

<b>// Если кэшированное приложение ссылается на несуществующий файл объявления,</b>

<b>// генерируется событие &quot;obsolete&quot; и приложение удаляется из кэша.</b>

<b>// В следующий раз приложение будет целиком загружаться из сети, а не из кэша, </b>

<b>window.applicationCache.onobsolete = function() {</b>

<b>  status(&quot;3то приложение больше не кэшируется. &quot; +</b>

<b>         &quot;Перезапустите его, чтобы получить последнюю версию из сети.&quot;);</b>

<b>  return false;</b>

<b>};</b>

Всякий раз, когда загружается HTML-файл с атрибутом

<b>manifest</b>
, броузер генерирует событие «checking» и загружает из сети файл объявления. Вслед за событием «checking» в разных ситуациях генерируются разные события:

Нет обновлений

Если приложение уже находится в кэше и файл объявления не изменился, броузер генерирует событие «noupdate».

Есть обновления

Если приложение находится в кэше и обнаружено изменение файла объявления, броузер генерирует событие «downloading» и приступает к загрузке и кэшированию всех файлов, перечисленных в файле объявления. С началом процесса загрузки начинают генерироваться события «progress». А по окончании загрузки генерируется событие «updateready».

Первая загрузка нового приложения

Если приложение отсутствует в кэше, события «downloading» и «progress» генерируются, как и для случая обновления кэше, описанного выше. Однако по окончании первой загрузки броузер генерирует событие «cached», а не «updateready».

Броузер работает в автономном режиме

Если броузер работает в автономном режиме, он не имеет возможности проверить файл объявления и генерирует событие «error». Это же событие генерируется, когда приложение, отсутствующее в кэше, ссылается на отсутствующий файл объявления.

Файл объявления отсутствует

Если броузер подключен к сети и приложение уже установлено в кэш, но при попытке получить файл объявления сервер возвращает ошибку 404 «Not Found», генерируется событие «obsolete» и приложение удаляется из кэша.

Обратите внимание, что все эти события можно отменить. Обработчики в примере 20.4 возвращают значение false, чтобы отменить действия, предусмотренные для событий по умолчанию. Это предотвращает вывод броузером своих собственных сообщений. (На момент написания этих строк ни один броузер не выводил никаких сообщений.)

В качестве альтернативы обработчикам событий, приложение может также использовать свойство

<b>applicationCache.status</b>
и с его помощью определять состояние кэша. Это свойство может иметь шесть разных значений:

<b>ApplicationCache.UNCACHED (0)</b>

Это приложение не имеет атрибута manifest: оно не кэшируется.

<b>ApplicationCache.IDLE(1)</b>

Файл объявления проверен, и в кэше находится последняя версия приложения.

<b>ApplicationCache.CHECKING (2)</b>

Броузер проверяет файл объявления.

<b>ApplicationCache.DOWNLOADING (3)</b>

Броузер загружает и сохраняет в кэше файлы, указанные в файле объявления.

<b>ApplicationCache.UPDATEREADY (4)</b>

Была загружена и установлена в кэш новая версия приложения.

<b>ApplicationCache.OBSOLETE (5)</b>

Файл объявления отсутствует, и приложение будет удалено из кэша.

Объект

<b>ApplicationCache</b>
также определяет два метода. Метод
<b>update()</b>
явно запускает процедуру проверки наличия новой версии приложения. Он заставляет броузер выполнить проверку файла объявления (и сгенерировать сопутствующие события), как если бы приложение загружалось в первый раз.