IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

本地存储的兼容解决方案

记事本 2011-10-13 13:56:59 累计浏览 2,429 次
本机暂存

IE浏览器用userData,主流浏览器用LocalStorage来解决本地存储的需求。userData存储的数据对于同一目录下的地址是可见的,如http://www.zhoumingzhi.com/1/foo.html可以访问到http://www.zhoumingzhi.com/1/bar.html存的数据。而LocalStorage存储的数据对相同域名下的所有页面都是可见的。

var localStorageAdapter = {
  
     storeName: 'NTESBBS',
  
     isLocalStorage: window.localStorage? true: false,
  
     dataDOM: this.isLocalStorage? null: (function() {
          try{
               var dataDOM = document.createElement('input'),
                    expires = new Date();
  
               dataDOM.type = 'hidden';
               dataDOM.style.display = 'none';
               dataDOM.addBehavior('#default#userData');
               document.body.appendChild(dataDOM);
  
               expires.setDate(expires.getDate() + 30);
               dataDOM.expires = expires.toUTCString();
  
               return dataDOM;
          } catch(ex) {
               return null;
          }
     })(),
  
     set: function(key, value) {
          var dataDOM = this.dataDOM;
  
          if(this.isLocalStorage) {
               window.localStorage.setItem(key, value);
          } else {
               if(dataDOM) {
                    dataDOM.load(this.storeName);
                    dataDOM.setAttribute(key, value);
                    dataDOM.save(this.storeName);
               }
          }
     },
  
     get: function(key) {
          var dataDOM = this.dataDOM;
  
          if(this.isLocalStorage) {
               return window.localStorage.getItem(key);
          } else {
               if(dataDOM) {
                    dataDOM.load(this.storeName);
                    return dataDOM.getAttribute(key);
               }
          }
     },
  
     remove: function(key) {
          var dataDOM = this.dataDOM;
  
          if(this.isLocalStorage) {
               window.localStorage.removeItem(key);
          } else {
               if(dataDOM) {
                    dataDOM.load(this.storeName);
                    dataDOM.removeAttribute(key);
                    dataDOM.save(this.storeName);
               }
          }
     }
}

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. HTML5 离线缓存-manifest简介 (累计阅读 17,102)
  2. HTML 5 的data-* 自定义属性 (累计阅读 14,349)
  3. jQuery的data()方法 (累计阅读 8,650)
  4. 前端必须熟悉的10个CSS3属性 (累计阅读 7,718)
  5. 面向移动设备的HTML5开发框架梳理 (累计阅读 7,415)
  6. 前端开发中Cookie那些事儿 (累计阅读 7,369)
  7. 30个超棒的404错误页面 (累计阅读 7,301)
  8. HTML5+CSS3 loading 效果收集 (累计阅读 6,438)
  9. 给HTML初学者的30条最佳实践 (累计阅读 5,808)
  10. Phonegap + HTML5 开发经验小结 (累计阅读 5,341)