| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 | //#region 本地存储Namespace.register("U.DW");/*** 异步加载跨域** @param  {boolean} 是否存储永不过期* @param  {object} 存储传参对象* @return {object} 本地存储使用对象*/U.DW.local = function (UTP, UDE) {    if ((!browser.msie || Number(browser.ver[2]) > 6)) {        try {            var _UDE = new Date(); //当前时间            (!UTP) && (_UDE.setTime(_UDE.getTime() + (9999 * 24 * 60 * 60 * 1000)), _UBE.expires = _UDE.toUTCString()); //设置永不过期        } catch (e) { }    }    return new U.DW.local.init(UTP); //初始化}/*** 初始化本地存储查看** @param  {boolean} 是否存储永不过期* @param  {boolean} 存储传参对象* @return {object} 本地存储使用对象*/U.DW.local.init = function (UTP, UDE) {    U.Ut.AddObj(this, {        UTP: UTP, //是否永不过期        UTF: (this.UJE = (UTP ? window.sessionStorage : window.localStorage)),  //存储对象        UJE: this.UJE || $$("input", { "type": "hidden", "style": { "behavior": "url(#default#userdata)"} }, document.body), //ie存储对象        UDE: UDE || {}, //传参使用        UGE: null,        scb: null,        date: {}    }); //变量    //事件绑定    (UDE && UDE.event) && (this.on(UDE.event));    return this;}/*** 兼容storage事件触发 ie8-** @param  {object} U.DW.local实例对象*/U.DW.local._cb = function (UTH) {    clearInterval(UTH.UTI); //计时器取消    UTH.UTI = setInterval(function () { //计时器消息        var _UDE = U.DW.local.iep(UTH); //ie兼容处理        (_UDE && UTH.UDE.event) && (UTH.UDE.event(_UDE));    }, 5000);};/*** ie兼容属性设置** @param  {object} U.DW.local实例对象* @param  {event} 上storage事件* @return  {event} storage事件*/U.DW.local.iep = function (UTH, UE) {    var i,    _UOE = UTH.date, //变化前的值    _UNE = UTH.UJE; //变化的对象    UTH.date = U.DW.local.get(UTH), //获取所有的变化内容    _UKE = UTH.getAllKey(); //获取所有的key    for (i = 0; i < _UKE.length; i++) {        if (_UOE[_UKE[i]] != _UNE[_UKE[i]]) { //判断是否key产生了变化            return { //返回最新的 ie storgeevent                Property: null,                key: _UKE[i], //变化的key值                oldValue: _UOE[_UKE[i]], //上一次的值                newValue: _UNE[_UKE[i]], //最新的值                url: UE ? (UE.url || UE.uri) : document.location.host //链接处理            };        }    }}/*** ie获取变化内容** @param  {object} U.DW.local实例对象* @return  {object} event值*/U.DW.local.get = function (UTH) {    var i, _UKE; UTH.date = [];    if (browser.ver[1] == "msie" && browser.ver[2].toInt() < 9) { //ie9- 处理        _UKE = UTH.getAllKey(); //获取所有的key        for (i = 0; i < _UKE.length; i++) { //获取所有的值 同时设置到 date里            UTH.date[_UKE[i]] = UTH.UJE[_UKE[i]];        }    }    return UTH.date;}U.DW.local.init.prototype = {    /**    * 事件绑定    *    * @param  {object} U.DW.local实例对象    */    on: function (UDE) {        this.off(); //事件取消        this.UDE.event = UDE;        this.scb = U.M.apply(this, this["storage"]); //事件        U.DW.local.get(this); //        this.UTF ? (U.M.AddEvent("storage", window, this.scb), U.M.AddEvent("storage", document, this.scb)) : U.DW.local._cb(this, this.getAll()); //    },    //事件绑定取消    off: function () {        this.UTF ? (U.M.ReEvent("storage", window, this.scb), U.M.ReEvent("storage", document, this.scb)) : clearInterval(this.UTI); //移除storage绑定 去除计时    },    /**    * 设置值    *    * @param  {object}需要存储的值 如    -----------{id:"aaa"}    * @param  {string} 值    ----------当这个参数存在的使用 参数一是 string的key 这个参数为值     * @return  {object} 对象    */    set: function (UDE, USE) { //        if (this.UJE) {            var i, _UME = this.UJE;            (USE != null) && (i = UDE, UDE = {}, UDE[i] = USE);            //设置存储的值            for (i in UDE) {                (UDE.hasOwnProperty(i)) && (this.UTF ? _UME.setItem(i, UDE[i]) : (_UME.setAttribute(i, UDE[i]), _UME.save("us")));            }        }        return this;    },    /**    * storage事件回调    * @param  {number} U.DW.local实例对象    */    storage: function (UE) {        if (this.UDE.event) {            var _UCB = this.UDE.event; //storage 事件回调函数            if (UE.newValue == null) { //storage是新值改变                UE = U.DW.local.iep(this); //生成 storgeevent事件            }            (_UCB && UE) && (_UCB(UE)); //回到到指定            U.M.StopBubble(); //        }    },    /**    * 事件绑定    * @param  {number} U.DW.local实例对象    * @param  {number} U.DW.local实例对象    */    get: function (UIE) { //获取值        if (this.UJE) {            var i, _UME = this.UJE,            _USE = {},            _UTP = this.UTF ? "getItem" : (_UME.load("us"), "getAttribute");            if (U.Ut.isString(UIE)) { //普通字符串获取                return _UME[_UTP](UIE);            }            if (U.Ut.isArray(UIE)) { //数组获取                for (i = 0; i < UIE.length; i++) {                    _USE[UIE[i]] = _UME[_UTP](UIE[i]);                }            }            else if (U.Ut.isObject(UIE)) { //对象获取                for (i in UIE) { (UIE.hasOwnProperty(i)) && (_USE[i] = _UME[_UTP](i)); }            }            return _USE;        }    },    /**    * 获取所有的值    * @return  {number} U.DW.local实例对象    */    getAll: function () {        var i, _UKE, _USE = {},        _UME = this.UJE;        if (this.UTF) { //h5处理            for (i = 0; i < _UME.length; i++) {                _UKE = this.key(i); //获取指定的位置的key                _USE[_UKE] = this.get(_UKE); //根据key获取值            }        }        else { //ie处理            _UME = _UME.XMLDocument.documentElement.attributes;            for (i = 0; i < _UME.length; i++) {                _USE[_UME[i].name] = _UME[i].nodeValue;            }        }        return _USE;    },    //获取所有的键    getAllKey: function () {        if (this.UJE) {            var _UME = this.UJE,            _USE = [];            if (this.UTF) {                for (i = 0; i < _UME.length; i++) {                    _USE.push(this.key(i));                }            }            else {                _UME = _UME.XMLDocument.documentElement.attributes;                for (i = 0; i < _UME.length; i++) { _USE.push(_UME[i].name); }            }            return _USE;        }    },    /**    * 移除值    * @param  {string 、 object} 移除的键值    * @return  {object} 本地存储类    */    remove: function (UIE) {        if (this.UJE) {            var i,            _UME = this.UJE,            _UTP = this.UTF ? "removeItem" : "removeAttribute"; //兼容删除的内容            if (U.Ut.isString(UIE)) { //普通删除                _UME[_UTP](UIE);            }            else if (U.Ut.isArray(UIE)) { //普通的通过key删除                for (i = 0; i < UIE.length; i++) {                    _UME[_UTP](UIE[i]);                }            }            else { //对象删除                for (i in UIE) {                    (UIE.hasOwnProperty(i)) && (_UME[_UTP](i));                }            }            (!this.UTF) && (_UME.save("us")); //ie还需要保存操作        } return this;    },    //移除所有的存储    clear: function () {        if (this.UJE) {            if (this.UTF) { this.UJE.clear(); } //HTML5            else { //ie处理删除                var i, _UME = this.UJE;                _UME.load("us");                _UME = _UME.XMLDocument.documentElement.attributes;  //所有的本地存储属性                for (i = 0; i < _UME.length; i++) { _UME.remove(_UME[i].name); } //循环删除            }        }    },    /**    * 索引值    * @param  {string} 键值    * @return  {string} 键值对应值    */    key: function (UI) {        if (this.UJE) {            if (this.UTF) { //html5获取值                return this.UJE.key(UI);            }            else { //ie获取                var _UME = this.UJE;                _UME.load("us"), //获取所有存储的值                _UDM = _UME.XMLDocument.documentElement.attrbutes;                if (_UDM[UI]) { //判断是否存在该键值的值                    return _UDM[UI].name;                }            }        }    },    //获取长度    length: function () {        if (this.UJE) {            if (this.UTF) { return this.UJE.length; } //html5获取值            else { //ie获取                var _UL, _UDM,                _UME = this.UJE;                _UME.load("us");                _UDM = _UME.XMLDocument; //获取所有存储的值                ((_UDM = _UDM.childNodes[0]) && (_UL = _UDM.attributes.length));                return _UL;            }        }    }}//#endregion
 |