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