Шрифт:
var value = localStorage[name]; // Получить значение для каждого из них
}
Объекты
Storage
также определяют методы для сохранения, извлечения и удаления данных. Эти методы рассматриваются в разделе 20.1.2. Проект спецификации «Web Storage» определяет возможность сохранения структурированных данных (объектов и массивов), а также простых значений и данных встроенных типов, таких как даты, регулярные выражения и даже объекты
File
. Однако на момент написания этих строк броузеры позволяли сохранять только строки. Если потребуется сохранять и извлекать данные других типов, их можно кодировать и декодировать вручную. Например:
// При сохранении числа оно автоматически преобразуется в строку.
// Не забудьте выполнить обратное преобразование при извлечении из хранилища.
localStorage.х = 10;
var х = parseInt(localStorage.х);
// Преобразовать объект Date в строку при записи и обратно - при чтении
localStorage.lastRead = (new Date).toUTCString;
var lastRead = new Date(Date.parse(localStorage.lastRead));
// Для кодирования любых простых или структурированных данных удобно
// использовать формат JS0N
localStorage.data = JSON.stringify(data); // Закодировать и сохранить
var data = JSON.parse(localStorage.data); // Извлечь и декодировать.
20.1.1. Срок хранения и область видимости
Объекты
localStorage
и sessionStorage
отличаются сроком хранения данных и областью видимости хранилища. Объект localStorage
представляет долговременное хранилище данных: срок хранения не ограничен, и данные сохраняются на компьютере пользователя, пока не будут удалены веб-приложением или пока пользователь не потребует от броузера (посредством некоторого пользовательского интерфейса, предоставляемого броузером) удалить их. Доступность данных в объекте
localStorage
ограничивается происхождением документа. Как описывалось в разделе 13.6.2, происхождение документа определяется такими параметрами, как протокол, имя хоста и номер порта, поэтому все следующие URL-адреса ссылаются на документы с разным происхождением:
http://www.example.com // Протокол: http: имя хоста: www.example.com
https://www.example.com // Другой протокол
http://static.example.com // Другое имя хоста
http://www.example.com:8000 // Другой порт
Все документы, имеющие одно и то же происхождение, будут совместно использовать одни и те же данные в объекте
localStorage
(независимо от происхождения сценария, который фактически обращается к хранилищу localStorage
). Они смогут читать и изменять данные друг друга. Но документы с разными происхождениями никогда не смогут прочитать или изменить данные друг друга (даже если оба они будут выполнять сценарий, полученный с одного и того же стороннего сервера). Обратите внимание, что видимость данных в хранилище
localStorage
также ограничивается конкретным броузером. Если посетить сайт с помощью Firefox, а затем вновь посетить его, например, с помощью Chrome, никакие данные, сохраненные при первом посещении, не будут доступны при втором посещении. Данные, сохраняемые в
sessionStorage
, имеют другой срок хранения: они хранятся, пока остается открытым окно верхнего уровня или вкладка броузера, в которой выполнялся сценарий, сохранивший эти данные. При закрытии окна или вкладки все данные, хранящиеся в sessionStorage
, удаляются. (Отметьте, однако, что современные броузеры имеют возможность повторно открывать недавно закрытые вкладки и восстанавливать последний сеанс работы с броузером, поэтому срок хранения информации об этих вкладках и связанных с ними хранилищах sessionStorage
может оказаться больше, чем кажется.) Доступность данных в хранилище
sessionStorage
, как и в хранилище localStorage
, ограничивается происхождением документа, т. е. документы с разным происхождением никогда не смогут совместно использовать одни и те же данные в sessionStorage
. Но помимо этого доступность данных в хранилище sessionStorage
ограничивается также окном. Если пользователь откроет в броузере две вкладки, отображающие документы с общим происхождением, эти две вкладки будут владеть разными хранилищами sessionStorage
. Сценарий, выполняющийся в одной вкладке, не сможет прочитать или изменить данные, сохраненные в другой вкладке, даже если в обеих вкладках будет открыта одна и та же страница и будет выполняться один и тот же сценарий. Обратите внимание, что разграничение хранилищ sessionStorage
в разных окнах касается только окон верхнего уровня. Если в одной вкладке броузера будет находиться несколько элементов <iframe>
и в этих фреймах будут отображаться документы с общим происхождением, они будут совместно использовать одно и то же хранилище sessionStorage
.