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

发布时间 - 2026-01-10 23:08:21    点击率:

本文实例讲述了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查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

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


# JS  # 本地  # 存储信息  # localStorage  # userData  # JavaScript本地存储的几种方式小结  # Javascript本地存储localStorage看这一篇就够了  # 详解JavaScript前端如何有效处理本地存储和缓存  # JavaScript本地存储全面解析  # javascript中localStorage本地存储(新增、删除、修改)使用详细教程  # JavaScript中本地存储(LocalStorage)和会话存储(SessionStorage)  # 基于js 本地存储(详解)  # javascript中本地存储localStorage  # sessionStorage  # cookie  # indexDB的用法与使用场景汇总  # 其他的  # 这是  # 几个  # 都有  # 也有  # 相关内容  # 将会  # 感兴趣  # 数据结构  # 给大家  # 很简单  # 弹出  # 还有一个  # 仅仅是  # 涉及到  # 显而易见  # 都用  # 快速发展  # 永远不会  # 更多关于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  高端云建站费用究竟需要多少预算?  如何用虚拟主机快速搭建网站?详细步骤解析  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何在万网主机上快速搭建网站?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  在centOS 7安装mysql 5.7的详细教程  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何在Tomcat中配置并部署网站项目?  Python函数文档自动校验_规范解析【教程】  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Python图片处理进阶教程_Pillow滤镜与图像增强  香港服务器部署网站为何提示未备案?  Swift中swift中的switch 语句  Internet Explorer官网直接进入 IE浏览器在线体验版网址  googleplay官方入口在哪里_Google Play官方商店快速入口指南  JS弹性运动实现方法分析  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel如何实现API速率限制?(Rate Limiting教程)  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Android Socket接口实现即时通讯实例代码  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  免费网站制作appp,免费制作app哪个平台好?  Mybatis 中的insertOrUpdate操作  微信小程序 闭包写法详细介绍  如何在宝塔面板中创建新站点?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何快速搭建虚拟主机网站?新手必看指南  Laravel API资源类怎么用_Laravel API Resource数据转换  如何快速搭建支持数据库操作的智能建站平台?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  javascript基于原型链的继承及call和apply函数用法分析  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)