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

Механизм

<b>userData</b>
позволяет сохранять гораздо большие объемы данных, чем cookies, но меньшие, чем объекты
<b>localStorage</b>
и
<b>sessionStorage</b>
.

Пример 20.3 реализует методы

<b>getltem(), setltem()</b>
и
<b>removeltem()</b>
интерфейса
<b>Storage</b>
поверх механизма
<b>userData</b>
в IE. (Он не реализует такие методы, как
<b>кеу()</b>
и
<b>clear()</b>
, потому что механизм
<b>userData</b>
не предоставляет возможность выполнять итерации по всем хранящимся элементам.)

Пример 20.3. Частичная реализация интерфейса

<b>Storage</b>
на основе механизма
<b>userData</b>
в IE

<b>function UserDataStorage(maxage) {</b>

<b>  // Создать элемент документа и установить в нем специальное</b>

<b>  // свойство behavior механизма userData, чтобы получить доступ</b>

<b>  // к методам save() и load().</b>

<b>  var memory = document.createElement(&quot;div&quot;); // Создать элемент</b>

<b>  memory.style.display = ''none&quot;; // He отображать его</b>

<b>  memory.style.behavior = &quot;url('#default#userData')&quot;; // Присоединить свойство behavior </b>

<b>  document.body.appendChild(memory); // Добавить в документ</b>

<b>  // Если указано значение параметра maxage, хранить данные maxage секунд</b>

<b>  if (maxage) {</b>

<b>    var now = new Date().getTime(); // Текущее время</b>

<b>    var expires = now + maxage * 1000; // maxage секунд от текущего времени</b>

<b>    memory.expires = new Date(expires).toUTCString();</b>

<b>  }</b>

<b>  // Инициализировать хранилище, загрузив сохраненные значения.</b>

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

<b>  // со значением, переданным методу save()</b>

<b>  memory.load(&quot;UserDataStorage”); // Загрузить сохраненные данные</b>

<b>  this.getltem = function(key) { // Загрузить значения атрибутов</b>

<b>    return memory.getAttribute(key) || null;</b>

<b>  };</b>

<b>  this.setltem = function(key, value) {</b>

<b>    memory.setAttribute(key,value); // Сохранить значения как атрибуты</b>

<b>    memory.save(&quot;UserDataStorage&quot;); // Сохранять после любых изменений</b>

<b>  };</b>

<b>  this.removeltem = function(key) {</b>

<b>    memory.removeAttribute(key); // Удалить сохраненные значения</b>

<b>    memory.save(&quot;UserDataStorage&quot;); // Сохранить новое состояние</b>

<b>  };</b>

<b>}</b>

Поскольку программный код из примера 20.3 будет работать только в IE, можно воспользоваться условными комментариями IE, чтобы предотвратить его загрузку в броузерах, отличных от IE:

<b>&lt;!—[if IЕ]&gt; </b>

<b>  &lt;script src=&quot;UserDataStorage.js&quot;&gt;&lt;/script&gt; </b>

<b>&lt;![endif]--&gt; </b>

20.4. Хранилище приложений и автономные веб-приложения

Стандарт HTML5 определяет новую особенность «кэш приложений» (application cache), которая может использоваться веб-приложениями для сохранения самих себя локально в броузере пользователя. Объекты

<b>localStorage</b>
и
<b>sessionStorage</b>
позволяют сохранять данные веб-приложений, тогда как кэш приложений позволяет сохранять сами приложения - все файлы (HTML, CSS, JavaScript, изображения и т. д.), необходимые для работы приложения. Кэш приложений отличается от обычного кэша веб-броузера: он не очищается, когда пользователь очищает обычный кэш. И кэшированные приложения не очищаются по признаку LRU (least-recently used - давно не используемые), как это может происходить в обычном кэше фиксированного размера. Приложения сохраняются в кэше не временно: они устанавливаются и могут оставаться в нем, пока не удалят себя сами или не будут удалены пользователем. В действительности, кэш приложений вообще не является кэшем - для него больше подошло бы название «хранилище приложений» (application storage).

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

<b>localStorage</b>
для сохранения своих данных и реализуют механизм синхронизации для передачи сохраненных данных при подключении к сети. Пример автономного веб-приложения мы увидим в разделе 20.4.3, но сначала нам необходимо узнать, как приложение может установить себя в кэш приложений.

20.4.1. Объявление кэшируемого приложения

Чтобы установить приложение в кэш приложений, необходимо создать файл объявления: файл, перечисляющий URL всех ресурсов, необходимых приложению. Затем нужно просто добавить ссылку на файл объявления в основную HTML-страницу приложения, определив атрибут

<b>manifest</b>
в теге
<b>&lt;html&gt;</b>
:

<b>&lt;!DOCTYPE HTML&gt;</b>