HTML5 Local Storage

Могу предположить, что уже многие слышали у новых возможностях html5. Одной из такой является localStorage. Говоря простыми словами — это клиент-сайд база данных, которая позволяет сохранять данных в форме «ключ — значение». Это достаточно удобно для сохранения временных данных пользователей.

На данный момент эта возможность поддерживается большинством современных браузеров: Safari 4+, Mobile Safari (iPhone/iPad), Firefox 3.5+, Internet Explorer 8+, Chrome 4+, Opera 10.6+. Далее я хотел бы рассказать как использовать это небольшое удобство для ваших проектов.

Где это может понадобиться? Скорее всего для сохранения каких-то небольших данных, которые лучше не гонять через cookie. Мне это понадобилось когда мы писали приложения для телефонов на Bada, где для быстроты разработки мы встроили webview и открыли в нем локальный html фаил (хорошо, что встроенный браузер был основан на webkit) и писали весь проект на html+javascript. И вот когда дело дошло до авторизации, тут localStorage как раз и пригодился.

Первое, что необходимо сделать, если вы хотите использовать localStorage — это проверить, поддерживает ли браузер пользователя эту возможность. Для этого можно использовать следующий код:

function isLocalStorageAvailable() {
    try {
        return 'localStorage' in window && window['localStorage'] !== null;
    } catch (e) {
        return false;
    }
}

Стоить заметить, что много данных не получится сохранить таким образом. Размер локального хранилища регулируется самим браузером и равен примерно 5-10Мб.

В отличие от cookie, данные могут быть сохранены на продолжительный срок. Каждый домен и субдомен имеет свой объект window.localStorage. Если у вас открыто 2 окна одного и того же домена, то изменение содержимого localStorage сразу будет доступно на другом окне или вкладке.

Кроме объекта window.localStorage существует элемент window.sessionStorage – представляет собой хранилище пользовательского набора данных которое существует и актуально только для одной вкладки браузера до тех пор, пока она не будет закрыта.

Теперь перейдем непосредственно к сохранению, получению и удалению данных.

Для сохранения данных используется следующий код:

localStorage.setItem('key', 'value');

Получения данных из localStorage:

var item = localStorage.getItem('key');
alert(item); //value

Удаление данных:

localStorage.removeItem('key'); //удалит элемент объекта
localStorage.clear(); //удалит все элементы

Что бы узнать не привысили ли мы лимит допустимого размера можно воспользоваться слудующей проверкой

try {
    localStorage.setItem('key', 'value');
} catch (e) {
    if (e == QUOTA_EXCEEDED_ERR) {
        alert('Локальное хранилище переполнено');
    }
}

Кстати, в firebug можно просто написать localStorage и он выведет какие элементы в нем хранятся. А в библиотке MSDN можно увидеть ещё дополниетельное свойство remainingSpace — получение оставшегося объема памяти (в байтах) для объекта хранения.

Таким образом в localStorage можно сохранять не только строковые переменные, но и целые объекты, например,

var noteObj = new Object();
var newDate = new Date();
noteObj.text = 'test';
noteObj.date = new Date().getTime();
localStorage.setItem("note", JSON.stringify(noteObj));

Что бы обратно получить JSON объект можно воспользоваться методом JSON.parse().

Вот так легко и просто можно использовать хранилище браузера для ваших целей. Это намного удобнее, чем постоянно гонять cookie пользователя. Таким образом можно реализовать интерфейс полностью основанный на ajax и javascript, а главное, работающий без перезагрузки страницы. Впрочем, в нашем приложении так и получилось.

Материалы используемые для подготовки статьи: