JS实现本地存储信息的方法(基于localStorage与userData)


Posted in Javascript onFebruary 18, 2017

本文实例讲述了JS实现本地存储信息的方法。分享给大家供大家参考,具体如下:

WEB应用的快速发展,是的本地存储一些数据也成为一种重要的需求,实现的方案也有很多,最普通的就是cookie了,大家也经常都用,但是cookie的缺点是显而易见的,其他的方案比如:IE6以上的userData,Firefox下面的globalStorage,以及Flash的本地存储,除了Flash之外,其他的几个都有一些兼容性的问题。

sessionStorage与localStorage

Web Storage实际上由两部分组成:sessionStorage与localStorage。

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

userData

语法:

XML  <Prefix: CustomTag ID=sID STYLE="behavior:url('#default#userData')" />
HTML  <ELEMENT STYLE="behavior:url('#default#userData')" ID=sID>
Scripting  object .style.behavior = "url('#default#userData')"
object .addBehavior ("#default#userData")

属性:

expires 设置或者获取 userData behavior 保存数据的失效日期。
XMLDocument 获取 XML 的引用。

方法:

getAttribute() 获取指定的属性值。
load(object) 从 userData 存储区载入存储的对象数据。
removeAttribute() 移除对象的指定属性。
save(object) 将对象数据存储到一个 userData 存储区。
setAttribute() 设置指定的属性值。

localStorage

方法:

localStorage.getItem(key):获取指定key本地存储的值
localStorage.setItem(key,value):将value存储到key字段
localStorage.removeItem(key):删除指定key本地存储的值

封装

localData = {
  hname:location.hostname?location.hostname:'localStatus',
  isLocalStorage:window.localStorage?true:false,
  dataDom:null,
  initDom:function(){ //初始化userData
   if(!this.dataDom){
    try{
     this.dataDom = document.createElement('input');//这里使用hidden的input元素
     this.dataDom.type = 'hidden';
     this.dataDom.style.display = "none";
     this.dataDom.addBehavior('#default#userData');//这是userData的语法
     document.body.appendChild(this.dataDom);
     var exDate = new Date();
     exDate = exDate.getDate()+30;
     this.dataDom.expires = exDate.toUTCString();//设定过期时间
    }catch(ex){
     return false;
    }
   }
   return true;
  },
  set:function(key,value){
   if(this.isLocalStorage){
    window.localStorage.setItem(key,value);
   }else{
    if(this.initDom()){
     this.dataDom.load(this.hname);
     this.dataDom.setAttribute(key,value);
     this.dataDom.save(this.hname)
    }
   }
  },
  get:function(key){
   if(this.isLocalStorage){
    return window.localStorage.getItem(key);
   }else{
    if(this.initDom()){
     this.dataDom.load(this.hname);
     return this.dataDom.getAttribute(key);
    }
   }
  },
  remove:function(key){
   if(this.isLocalStorage){
    localStorage.removeItem(key);
   }else{
    if(this.initDom()){
     this.dataDom.load(this.hname);
     this.dataDom.removeAttribute(key);
     this.dataDom.save(this.hname)
    }
   }
  }
}

使用方法就很简单了,这节set,get,remove就好了。

里面涉及到的 demo 代码如下:

<script type="text/javascript">
(function() {
  window.localData = {
    hname : location.hostname ? location.hostname : 'localStatus',
    isLocalStorage : window.localStorage ? true : false,
    dataDom : null,
    initDom : function() {
      if (!this.dataDom) {
        try {
          this.dataDom = document.createElement('input');
          this.dataDom.type = 'hidden';
          this.dataDom.style.display = "none";
          this.dataDom.addBehavior('#default#userData');
          document.body.appendChild(this.dataDom);
          var exDate = new Date();
          exDate = exDate.getDate() + 30;
          this.dataDom.expires = exDate.toUTCString();
        } catch (ex) {
          return false;
        }
      }
      return true;
    },
    set : function(key, value) {
      if (this.isLocalStorage) {
        window.localStorage.setItem(key, value);
      } else {
        if (this.initDom()) {
          this.dataDom.load(this.hname);
          this.dataDom.setAttribute(key, value);
          this.dataDom.save(this.hname)
        }
      }
    },
    get : function(key) {
      if (this.isLocalStorage) {
        return window.localStorage.getItem(key);
      } else {
        if (this.initDom()) {
          this.dataDom.load(this.hname);
          return this.dataDom.getAttribute(key);
        }
      }
    },
    remove : function(key) {
      if (this.isLocalStorage) {
        localStorage.removeItem(key);
      } else {
        if (this.initDom()) {
          this.dataDom.load(this.hname);
          this.dataDom.removeAttribute(key);
          this.dataDom.save(this.hname)
        }
      }
    }
  };
  var text = document.getElementById('localDataHook');
  var btn = document.getElementById('clearBtnHook');
  window.onbeforeunload = function() {
    localData.set('beiyuuData', text.value);
  };
  btn.onclick = function() {
    localData.remove('beiyuuData');
    text.value = ''
  };
  if (localData.get('beiyuuData')) {
    text.value = localData.get('beiyuuData');
  }
})();
</script>

还有一个比较实用的技术,阻止页面关闭,显示 关闭页面确认弹出框,参考代码如下:

window.onbeforeunload = function() {
  if (!canLeavePage()) {
    return ('确认离开当前页面吗?未保存的数据将会丢失!');
  }
};

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 写类方式之二
Jul 05 Javascript
关于jQuery object and DOM element
Apr 15 Javascript
javascript中数组的sort()方法的使用介绍
Dec 18 Javascript
JavaScript检查某个function是否是原生代码的方法
Aug 20 Javascript
javascript转换日期字符串为Date日期对象的方法
Feb 13 Javascript
jQuery实现div横向拖拽排序的简单实例
Jul 13 Javascript
jQuery实现简易的输入框字数计数功能示例
Jan 16 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
vue项目总结之文件夹结构配置详解
Dec 13 Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 Javascript
JS实现纵向轮播图(初级版)
Jan 18 Javascript
vue v-on:click传递动态参数的步骤
Sep 11 Javascript
JS表单数据验证的正则表达式(常用)
Feb 18 #Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 #Javascript
JS设置时间无效问题的解决办法
Feb 18 #Javascript
js的OOP继承实现(必看篇)
Feb 18 #Javascript
jQuery仿IOS弹出框插件
Feb 18 #Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
Feb 18 #Javascript
angular ng-repeat数组中的数组实例
Feb 18 #Javascript
You might like
页面中iframe相互传值传参
2009/12/13 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
python列表与元组详解实例
2013/11/01 Python
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Python更新所有已安装包的操作
2020/02/13 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
数据库面试要点基本概念
2013/10/31 面试题
师范毕业生求职自荐信
2013/09/25 职场文书
银行简历自我评价
2014/02/11 职场文书
社团活动总结范文
2014/04/26 职场文书
团日活动总结怎么写
2014/06/25 职场文书
会议邀请函
2015/01/30 职场文书
六年级数学教学反思
2016/02/16 职场文书