Storage.prototype не работает в IE8

Я пытался заставить это работать в IE8, и хотя он не жалуется на это, он полностью их игнорирует.

if( typeof(Storage) != "undefined"){
    Storage.prototype.setObject = function(key, value) {
          this.setItem(key, escape(JSON.stringify(value)));
    }   

    Storage.prototype.getObject = function(key) {       
        return JSON.parse(unescape(this.getItem(key)));
    }
}

Когда я пытаюсь:

localStorage.setObject("key", <Some object>);

Я получаю сообщение об ошибке «Объект не поддерживает этот метод», и функция даже не вызывается. Конечно, этот код отлично работает в Chrome и Firefox и, возможно, даже на моих часах Casio 1980-х годов.

Любая помощь будет здорово.

Случайный и совершенно не связанный с IE8, когда я возвращаю свой объект, мне нужно дважды JSON.parse его, чтобы получить объект...

Спасибо, Пол.


person Paul Barclay    schedule 16.02.2012    source источник
comment
Похоже, вы не можете расширить хранилище в IE8. Думаю, вы мало что можете с этим поделать.   -  person Niet the Dark Absol    schedule 16.02.2012
comment
Я боялся, что это так, неважно, я просто создам отдельную функцию, чтобы справиться с этим, как вы предложили.   -  person Paul Barclay    schedule 16.02.2012
comment
escape и unescape не имеют смысла, к тому же они устарели.   -  person epascarello    schedule 24.11.2015
comment
В основном то же самое: stackoverflow.com/questions/10514705/   -  person epascarello    schedule 24.11.2015


Ответы (1)


Лучше использовать отдельную функцию, чем возиться с прототипом встроенного объекта.

function storeObject(key,obj) {
    localStorage[key] = JSON.stringify(obj);
}
function retrieveObject(key) {
    return JSON.parse(localStorage[key]);
}

Это более надежно, чем операции с прототипами, особенно в старых браузерах.

person Niet the Dark Absol    schedule 16.02.2012
comment
Наконец-то реальное объяснение. Спасибо. - person Rob; 28.03.2012