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访问XML数据的实例
Dec 27 Javascript
这些年、我收集的JQuery代码小结
Aug 01 Javascript
jQuery焦点图切换简易插件制作过程全纪录
Aug 27 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
Feb 18 Javascript
js检测用户输入密码强度
Oct 22 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
Jan 11 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
layui 弹出删除确认界面的实例
Sep 06 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 Javascript
vue 使用async写数字动态加载效果案例
Jul 18 Javascript
手写实现JS中的new
Nov 07 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 版本]
2007/03/20 PHP
phpMyAdmin 安装及问题总结
2009/05/28 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
php数组分页实现方法
2016/04/30 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
Python编程pygal绘图实例之XY线
2017/12/09 Python
Django forms组件的使用教程
2018/10/08 Python
anaconda如何查看并管理python环境
2019/07/05 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书