| 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
 
 
  |