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 相关文章推荐
跟随鼠标旋转的文字
Nov 30 Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
Jul 14 Javascript
javascript自动给文本url地址增加链接的方法分享
Jan 20 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
Sep 14 Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
JS中的const命令你真懂它吗
Mar 08 Javascript
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
Vue router配置与使用分析讲解
Dec 24 Vue.js
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
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
传播学毕业生求职信
2013/10/11 职场文书
入党推优材料
2014/06/02 职场文书
煤矿安全保证书
2015/02/27 职场文书
详解Laravel制作API接口
2021/05/31 PHP
详解MySQL的内连接和外连接
2023/05/08 MySQL