跨浏览器兼容的localStorage / cookie代码未在IE中运行

时间:2013-11-04 02:42:15

标签: javascript html5 cookies cross-browser local-storage

(function (window) {
  localStorage = local_store = {
    getItem: function (skey) {
        if (!skey) {
            return null;
        }
        if (!window.localStorage) {
            return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(skey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1"));
        } else {
            return window.localStorage.getItem(skey);
        }
    },
    key: function (nkeyid) {
        if (!window.localStorage) {
            return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/, "").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nkeyid]);
        } else {
            window.localStorage.key(nkeyid);
        }
    },
    setItem: function (skey, sValue) {
        if (!skey) {
            return;
        }

        if (!window.localStorage) {
            document.cookie = escape(skey) + "=" + escape(sValue) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
            this.length = document.cookie.match(/\=/g).length;
        } else {
            window.localStorage.setItem(skey, sValue);
            this.length++;
        }
    },
    length: (document.cookie.match(/\=/g) || window.localStorage).length,
    removeItem: function (skey) {
        if (skey || !this.hasOwnProperty(skey)) {
            return;
        }
        if (!window.localStorage) {
            document.cookie = escape(skey) + "=;expires=Thu,01 Jan 1970 00:00:00 GMT;path=/";
            this.length--;
        } else {
            window.localStorage.removeItem(skey);
        }
    },
    hasOwnProperty: function (skey) {
        if (!window.localStorage) {
            return (new RegExp("(?:^/;\\s*)" + escape(skey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
        } else {
            return window.localStorage.hasOwnProperty();
        }
    },
    returnObj: function () {
        if (!window.localStorage) {
            return document.cookie;
        } else {
            return window.localStorage;
        }
    }
};
window.local_store = local_store.hasOwnProperty ? local_store.returnObj() : local_store;
}(window));

上面的代码在其他浏览器中运行,但在IE10中我收到错误:

Unable to get property 'length' of undefined or null reference

它指向代码的localStorage= local_store = {部分。

有谁知道为什么会这样?

http://jsbin.com/OdajuGO/1/edit用于测试目的

0 个答案:

没有答案