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 相关文章推荐
jquery动态添加删除一行数据示例
Jun 12 Javascript
js处理php输出时间戳对不上号的解决方法
Jun 20 Javascript
前端轻量级MVC框架CanJS详解
Sep 26 Javascript
JQuery基础语法小结
Feb 27 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
vue中页面跳转拦截器的实现方法
Aug 23 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 Javascript
使用RxJS更优雅地进行定时请求详析
Jun 02 Javascript
详解Vue之事件处理
Jul 10 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 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
php 随机排序广告的实现代码
2011/05/09 PHP
php学习笔记之 函数声明
2011/06/09 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php实现文件上传基本验证
2020/03/04 PHP
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python数据结构之Array用法实例
2014/10/09 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
财务与信息服务专业推荐信
2013/11/28 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
婚纱店策划方案
2014/05/22 职场文书
共青团员自我评价
2015/03/10 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记