JavaScript. Подробное руководство, 6-е издание, стр. 341
<b>CACHE MANIFEST</b><b># МуАрр версия 1 (изменяйте этот номер, чтобы заставить броузеры повторно</b><b># загрузить следующие файлы)</b><b>MyApp.html</b><b>МуАрр.js</b>Аналогично, если потребуется, чтобы веб-приложение удалило себя из кэша приложений, следует удалить файл объявления на сервере, чтобы на запрос этого файла возвращался бы НТТР-ответ 404 «Not Found», и изменить HTML-файл или файлы, удалив из них ссылки на файл объявления.
Обратите внимание, что броузеры проверяют файл объявления и обновляют кэш асинхронно, после (или во время) загрузки копии приложения из кэша. Для простых веб-приложений это означает, что после обновления файла объявления пользователь должен дважды загрузить приложение, чтобы получить обновленную версию: в первый раз будет загружена старая версия из кэша, после чего произойдет обновление файлов в кэше, а во второй раз из кэша будет загружена новая версия.
В ходе обновления кэша броузер запускает множество событий, что дает возможность зарегистрировать их обработчики и извещать пользователя. Например:
<b>applicationCache.onupdateready = function() {</b><b> var reload = confirm("Доступна новая версия приложения, которая\n” +</b><b> "будет использована при следующем запуске.\n" +</b><b> "Хотите ли перезапустить ее сейчас?");</b><b> if (reload) location.reload();</b><b>}</b>Обратите внимание, что этот обработчик событий регистрируется в объекте
<b>ApplicationCache</b><b>applicationCache</b><b>Window</b>Пример 20.4. Обработка событий кэша приложений
<b>// Эту функцию используют все обработчики событий, реализованные ниже, и выводят </b><b>// с ее помощью сообщения, информирующие о состоянии кэша приложений.</b><b>// Поскольку все обработчики отображают сообщения таким способом, они </b><b>// возвращают false, чтобы отменить дальнейшее распространение события </b><b>// и предотвратить вывод сообщений самим броузером, </b><b>function status(msg) {</b><b> // Вывести сообщение в элементе документа с id="statusline"</b><b> document.getElementById("statusline").innerHTML = msg;</b><b> console.log(msg); // А также в консоли для отладки</b><b>}</b><b>// Каждый раз, когда приложение загружается, броузер проверяет файл объявления. </b><b>// В начале этого процесса первым всегда генерируется событие "checking", </b><b>window.applicationCache.onchecking = function() {</b><b> status("Проверка наличия новой версии.");</b><b> return false;</b><b>};</b><b>// Если файл объявления не изменился и приложение уже имеется в кэше, </b><b>// генерируется событие "noupdate" и процедура проверки заканчивается, </b><b>window.applicationCache.onnoupdate = function() {</b><b> status("Версия приложения не изменилась.")</b><b> return false;</b><b>};</b><b>// Если приложение отсутствует в кэше или если изменился файл объявления,</b><b>// броузер загрузит и поместит в кэш все, что перечислено в файле объявления. </b><b>// Событие "downloading" свидетельствует о начале этой процедуры загрузки, </b><b>window.applicationCache.ondownloading = function() {</b><b> status("Загружается новая версия");</b><b> window.progresscount = 0; // Используется в обработчике "progress" ниже</b><b> return false;</b><b>};</b><b>// В ходе загрузки периодически генерируются события "progress”,</b><b>// обычно после загрузки каждого файла.</b><b>window.applicationCache.onprogress = function(e) {</b><b> // Объект события должен соответствовать событию "progress" (подобному тому, </b><b> // что используется XHR2), что позволяет вычислять процент выполнения,</b><b> // но на всякий случай мы заведем счетчик количества вызовов,</b><b> var progress = "";</b><b> if (е && е.lengthComputable) // Событие "progress": вычислить процент</b><b> progress = " " + Math.round(100*e.loaded/e.total) + "%”</b><b> else // Иначе сообщить кол-во вызовов</b>