U.DW.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. //#region 本地存储
  2. Namespace.register("U.DW");
  3. /**
  4. * 异步加载跨域
  5. *
  6. * @param {boolean} 是否存储永不过期
  7. * @param {object} 存储传参对象
  8. * @return {object} 本地存储使用对象
  9. */
  10. U.DW.local = function (UTP, UDE) {
  11. if ((!browser.msie || Number(browser.ver[2]) > 6)) {
  12. try {
  13. var _UDE = new Date(); //当前时间
  14. (!UTP) && (_UDE.setTime(_UDE.getTime() + (9999 * 24 * 60 * 60 * 1000)), _UBE.expires = _UDE.toUTCString()); //设置永不过期
  15. } catch (e) { }
  16. }
  17. return new U.DW.local.init(UTP); //初始化
  18. }
  19. /**
  20. * 初始化本地存储查看
  21. *
  22. * @param {boolean} 是否存储永不过期
  23. * @param {boolean} 存储传参对象
  24. * @return {object} 本地存储使用对象
  25. */
  26. U.DW.local.init = function (UTP, UDE) {
  27. U.Ut.AddObj(this, {
  28. UTP: UTP, //是否永不过期
  29. UTF: (this.UJE = (UTP ? window.sessionStorage : window.localStorage)), //存储对象
  30. UJE: this.UJE || $$("input", { "type": "hidden", "style": { "behavior": "url(#default#userdata)"} }, document.body), //ie存储对象
  31. UDE: UDE || {}, //传参使用
  32. UGE: null,
  33. scb: null,
  34. date: {}
  35. }); //变量
  36. //事件绑定
  37. (UDE && UDE.event) && (this.on(UDE.event));
  38. return this;
  39. }
  40. /**
  41. * 兼容storage事件触发 ie8-
  42. *
  43. * @param {object} U.DW.local实例对象
  44. */
  45. U.DW.local._cb = function (UTH) {
  46. clearInterval(UTH.UTI); //计时器取消
  47. UTH.UTI = setInterval(function () { //计时器消息
  48. var _UDE = U.DW.local.iep(UTH); //ie兼容处理
  49. (_UDE && UTH.UDE.event) && (UTH.UDE.event(_UDE));
  50. }, 5000);
  51. };
  52. /**
  53. * ie兼容属性设置
  54. *
  55. * @param {object} U.DW.local实例对象
  56. * @param {event} 上storage事件
  57. * @return {event} storage事件
  58. */
  59. U.DW.local.iep = function (UTH, UE) {
  60. var i,
  61. _UOE = UTH.date, //变化前的值
  62. _UNE = UTH.UJE; //变化的对象
  63. UTH.date = U.DW.local.get(UTH), //获取所有的变化内容
  64. _UKE = UTH.getAllKey(); //获取所有的key
  65. for (i = 0; i < _UKE.length; i++) {
  66. if (_UOE[_UKE[i]] != _UNE[_UKE[i]]) { //判断是否key产生了变化
  67. return { //返回最新的 ie storgeevent
  68. Property: null,
  69. key: _UKE[i], //变化的key值
  70. oldValue: _UOE[_UKE[i]], //上一次的值
  71. newValue: _UNE[_UKE[i]], //最新的值
  72. url: UE ? (UE.url || UE.uri) : document.location.host //链接处理
  73. };
  74. }
  75. }
  76. }
  77. /**
  78. * ie获取变化内容
  79. *
  80. * @param {object} U.DW.local实例对象
  81. * @return {object} event值
  82. */
  83. U.DW.local.get = function (UTH) {
  84. var i, _UKE; UTH.date = [];
  85. if (browser.ver[1] == "msie" && browser.ver[2].toInt() < 9) { //ie9- 处理
  86. _UKE = UTH.getAllKey(); //获取所有的key
  87. for (i = 0; i < _UKE.length; i++) { //获取所有的值 同时设置到 date里
  88. UTH.date[_UKE[i]] = UTH.UJE[_UKE[i]];
  89. }
  90. }
  91. return UTH.date;
  92. }
  93. U.DW.local.init.prototype = {
  94. /**
  95. * 事件绑定
  96. *
  97. * @param {object} U.DW.local实例对象
  98. */
  99. on: function (UDE) {
  100. this.off(); //事件取消
  101. this.UDE.event = UDE;
  102. this.scb = U.M.apply(this, this["storage"]); //事件
  103. U.DW.local.get(this); //
  104. this.UTF ? (U.M.AddEvent("storage", window, this.scb), U.M.AddEvent("storage", document, this.scb)) : U.DW.local._cb(this, this.getAll()); //
  105. },
  106. //事件绑定取消
  107. off: function () {
  108. this.UTF ? (U.M.ReEvent("storage", window, this.scb), U.M.ReEvent("storage", document, this.scb)) : clearInterval(this.UTI); //移除storage绑定 去除计时
  109. },
  110. /**
  111. * 设置值
  112. *
  113. * @param {object}需要存储的值 如
  114. -----------{id:"aaa"}
  115. * @param {string} 值
  116. ----------当这个参数存在的使用 参数一是 string的key 这个参数为值
  117. * @return {object} 对象
  118. */
  119. set: function (UDE, USE) { //
  120. if (this.UJE) {
  121. var i, _UME = this.UJE;
  122. (USE != null) && (i = UDE, UDE = {}, UDE[i] = USE);
  123. //设置存储的值
  124. for (i in UDE) {
  125. (UDE.hasOwnProperty(i)) && (this.UTF ? _UME.setItem(i, UDE[i]) : (_UME.setAttribute(i, UDE[i]), _UME.save("us")));
  126. }
  127. }
  128. return this;
  129. },
  130. /**
  131. * storage事件回调
  132. * @param {number} U.DW.local实例对象
  133. */
  134. storage: function (UE) {
  135. if (this.UDE.event) {
  136. var _UCB = this.UDE.event; //storage 事件回调函数
  137. if (UE.newValue == null) { //storage是新值改变
  138. UE = U.DW.local.iep(this); //生成 storgeevent事件
  139. }
  140. (_UCB && UE) && (_UCB(UE)); //回到到指定
  141. U.M.StopBubble(); //
  142. }
  143. },
  144. /**
  145. * 事件绑定
  146. * @param {number} U.DW.local实例对象
  147. * @param {number} U.DW.local实例对象
  148. */
  149. get: function (UIE) { //获取值
  150. if (this.UJE) {
  151. var i, _UME = this.UJE,
  152. _USE = {},
  153. _UTP = this.UTF ? "getItem" : (_UME.load("us"), "getAttribute");
  154. if (U.Ut.isString(UIE)) { //普通字符串获取
  155. return _UME[_UTP](UIE);
  156. }
  157. if (U.Ut.isArray(UIE)) { //数组获取
  158. for (i = 0; i < UIE.length; i++) {
  159. _USE[UIE[i]] = _UME[_UTP](UIE[i]);
  160. }
  161. }
  162. else if (U.Ut.isObject(UIE)) { //对象获取
  163. for (i in UIE) { (UIE.hasOwnProperty(i)) && (_USE[i] = _UME[_UTP](i)); }
  164. }
  165. return _USE;
  166. }
  167. },
  168. /**
  169. * 获取所有的值
  170. * @return {number} U.DW.local实例对象
  171. */
  172. getAll: function () {
  173. var i, _UKE, _USE = {},
  174. _UME = this.UJE;
  175. if (this.UTF) { //h5处理
  176. for (i = 0; i < _UME.length; i++) {
  177. _UKE = this.key(i); //获取指定的位置的key
  178. _USE[_UKE] = this.get(_UKE); //根据key获取值
  179. }
  180. }
  181. else { //ie处理
  182. _UME = _UME.XMLDocument.documentElement.attributes;
  183. for (i = 0; i < _UME.length; i++) {
  184. _USE[_UME[i].name] = _UME[i].nodeValue;
  185. }
  186. }
  187. return _USE;
  188. },
  189. //获取所有的键
  190. getAllKey: function () {
  191. if (this.UJE) {
  192. var _UME = this.UJE,
  193. _USE = [];
  194. if (this.UTF) {
  195. for (i = 0; i < _UME.length; i++) {
  196. _USE.push(this.key(i));
  197. }
  198. }
  199. else {
  200. _UME = _UME.XMLDocument.documentElement.attributes;
  201. for (i = 0; i < _UME.length; i++) { _USE.push(_UME[i].name); }
  202. }
  203. return _USE;
  204. }
  205. },
  206. /**
  207. * 移除值
  208. * @param {string 、 object} 移除的键值
  209. * @return {object} 本地存储类
  210. */
  211. remove: function (UIE) {
  212. if (this.UJE) {
  213. var i,
  214. _UME = this.UJE,
  215. _UTP = this.UTF ? "removeItem" : "removeAttribute"; //兼容删除的内容
  216. if (U.Ut.isString(UIE)) { //普通删除
  217. _UME[_UTP](UIE);
  218. }
  219. else if (U.Ut.isArray(UIE)) { //普通的通过key删除
  220. for (i = 0; i < UIE.length; i++) {
  221. _UME[_UTP](UIE[i]);
  222. }
  223. }
  224. else { //对象删除
  225. for (i in UIE) {
  226. (UIE.hasOwnProperty(i)) && (_UME[_UTP](i));
  227. }
  228. }
  229. (!this.UTF) && (_UME.save("us")); //ie还需要保存操作
  230. } return this;
  231. },
  232. //移除所有的存储
  233. clear: function () {
  234. if (this.UJE) {
  235. if (this.UTF) { this.UJE.clear(); } //HTML5
  236. else { //ie处理删除
  237. var i, _UME = this.UJE;
  238. _UME.load("us");
  239. _UME = _UME.XMLDocument.documentElement.attributes; //所有的本地存储属性
  240. for (i = 0; i < _UME.length; i++) { _UME.remove(_UME[i].name); } //循环删除
  241. }
  242. }
  243. },
  244. /**
  245. * 索引值
  246. * @param {string} 键值
  247. * @return {string} 键值对应值
  248. */
  249. key: function (UI) {
  250. if (this.UJE) {
  251. if (this.UTF) { //html5获取值
  252. return this.UJE.key(UI);
  253. }
  254. else { //ie获取
  255. var _UME = this.UJE;
  256. _UME.load("us"), //获取所有存储的值
  257. _UDM = _UME.XMLDocument.documentElement.attrbutes;
  258. if (_UDM[UI]) { //判断是否存在该键值的值
  259. return _UDM[UI].name;
  260. }
  261. }
  262. }
  263. },
  264. //获取长度
  265. length: function () {
  266. if (this.UJE) {
  267. if (this.UTF) { return this.UJE.length; } //html5获取值
  268. else { //ie获取
  269. var _UL, _UDM,
  270. _UME = this.UJE;
  271. _UME.load("us");
  272. _UDM = _UME.XMLDocument; //获取所有存储的值
  273. ((_UDM = _UDM.childNodes[0]) && (_UL = _UDM.attributes.length));
  274. return _UL;
  275. }
  276. }
  277. }
  278. }
  279. //#endregion