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
|