Можностей, предоставляемых веб-разработчикам



Pdf көрінісі
бет225/232
Дата06.01.2022
өлшемі5,47 Mb.
#12231
1   ...   221   222   223   224   225   226   227   228   ...   232
Байланысты:
[Bryus Louson, Remi SHarp] Izuchaem HTML5. Bibliot(z-lib.org)

Обходные варианты
Поскольку API хранилища устроен относительно просто, его функциональность можно 
воспроизвести с помощью JavaScript — на случай, если API хранилища окажется недо-
ступным.


Хранение данных  •  201
ПРИМЕЧАНИЕ
Если вам хочется побольше узнать о заполнении, отправляйтесь в главу 12  Мы подождем вас 
здесь 
Для 
localStorage
 можно использовать файлы cookie, или, для лучшей поддержки, встро-
енные методы 
userData
 браузера, или даже объект Flash. Для 
sessionStorage
 используйте 
заполнитель, работающий со свойством 
name
 объекта 
window
. В следующем фрагменте 
кода показано, как воспроизвести функциональность 
sessionStorage
 (и гарантировать, 
что данные будут доступны только текущему окну, а не «протекут» в другие, как бывает 
с файлами cookie), вручную реализовав каждый из методов API хранилища. Обратите 
внимание, что в коде подразумевается, что в вашем браузере есть поддержка JSON — либо 
с помощью стандартных методов, либо через библиотеку Дугласа Крокфорда.
if (typeof sessionStorage === 'undefined') {
    sessionStorage = (function () {
        var data = window.top.name ? JSON.parse(window.top..
        ¬ name) : {};
        return {
            clear: function () {
                data = {};
                window.top.name = '';
            } ,
            getItem: function (key) {
                return data[key] || null;
            } ,
            key: function (i) {
                // не идеально, но работает
                var ctr = 0;
                for (var k in data) {
                    if (ctr == i) return k
                    else ctr++;
                }
            } ,
            removeItem: function (key) {
                delete data[key];
                window.top.name = JSON.stringify(data);
            } ,
            setItem: function (key, value) {
                data[key] = value+''; // превращаем значение
                ¬ в строку
                window.top.name = JSON.stringify(data);
            }
        } ;
    })();
}


202  •  Глава 6
Проблема с реализацией 
sessionStorage
 вручную (как показано в предыдущем фрагмен-
те) заключается в том, что у нас нет методов 
setter
 и 
getter
 (или, скорее, в том, что IE7 
и более ранние версии не поддерживают их, а это, в действительности, единственный по-
пулярный устаревший браузер без встроенной поддержки 
sessionStorage
). Это означает, 
что невозможно использовать, например, такой код: 
sessionStorage.twitter
 
=
 
'@rem'

Хотя технически он сработает, он не будет правильно зарегистрирован в объекте храни-
лища, и 
sessionStorage.getItem('twitter')
 не вернет результата. Обойти конкретную 
проблему можно, но самое главное, что обновление окна браузера приведет к утере данных.
Помня это, и в зависимости от того, для какого браузера предназначен код (имеется в виду, 
нужно ли вручную реализовывать свой вариант хранилища), внутри команды разработ-
чиков обязательно стоит договориться, можно ли ограничиться только методами 
getItem
 
и 
setItem
.


Достарыңызбен бөлісу:
1   ...   221   222   223   224   225   226   227   228   ...   232




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет