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