localStorage的用途

localStorage基本上就是三个特点:

  1. 数据永久被保存在本地,即使浏览器被关闭,数据也不会消失
  2. 存储空间大,一般为5~10M
  3. 存储的内容不会和服务器发生任何交互(cookie就会随着请求发送给server)

因此,当你需要持久的存储用户的数据,并且不和服务器交互时,就可以使用localStorage。个人想到的就是在本地保存用户的登录状态,保存用户的浏览记录,以及一些插件设置等等,或者换句话说,以前用cookie的地方现在基本上都可以使用localStorage进行替代。

localStorage的操作

localStorage是以(Key,Value)的形式进行设置和读取的,它的操作也非常的简单。

localStorage.length: 返回现在已经存储的变量数目。
localStorage.key(n): 返回第n个变量的键值(key)。
localStorage.getItem(k): 和localStorage.k一样,取得键值为k的变量的值。
localStorage.setItem(k , v): 和localStorage.k = v一样,设置键值k的变量值。
localStorage.removeItem(k): 删除键值为k的变量。
localStorage.clear(): 清空所有变量。

在Chrome中,localStorage是以文件的形式存储的,存储路径为:C:\Users\UserName\AppData\Local\Google\Chrome\User Data\Default\Local Storage。文件名一般为domain_number.localstorage

localStorage的兼容性

可以看出,并不是所有的浏览器都支持localStorage的,比如IE6和IE7。说到这里,就不得不说一下本地存储的进化历程,从下图可以对比出localStorage的优势和来之不易:

cookie的主要问题是容量太小了;userData的问题是只针对IE+Windows的组合;Flash的问题是需要引入swf等相关文件;Gears是谷歌提出的方案,已经停止更新了。

因此,我们主要还是要使用UserData来处理IE6-7的本地存储。

userData使用

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")

userData常用方法:

Method Description
getAttribute Retrieves the value of the specified attribute.
load Loads an object participating in userData persistence from a UserData store.
removeAttribute Removes the specified attribute from the object.
save Saves an object participating in userData persistence to a UserData store.
setAttribute Sets the value of the specified attribute.

详细使用方法请看:http://msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx

OurJS对不同浏览器下localStorage进行了统一封装:

if (window.localStorage || !document.documentElement.addBehavior || location.protocol === 'file:') {return;}/*** 为不支持 localStorage 的浏览器提供类似的功能。* @name localStorage* @namespace* @description*   在不支持 localStorage 的浏览器中,会使用路径 '/favicon.ico' 来创建启用 userData 的元素。应保证上述路径存在,以免出现预料外的异常。*   userData 的尺寸限制为每文件 128KB,每域 1024KB;受限站点每文件 64KB,每域 640KB。*/var localStorage = window.localStorage ={};//指定一个固定的 userData 存储文件名。var STORE_NAME = 'localStorage';//用来保存 userData 的元素。varstoreElement;//在当前域的根路径创建一个文档,并在此文档中创建用来保存 userData 的元素。try{//使用这种方式(而不是在当前文档内直接插入 IFRAME 元素)可以避免在 IE6 的应用代码中调用 document.write 时出现“已终止操作”的异常。//http://www.cnblogs.com/my_life/articles/2749709.html: 推技术ActiveXobject("htmlfile") 长连接var storeContainerDocument = new ActiveXObject('htmlfile'); //创建对象storeContainerDocument.open(); //打开storeContainerDocument.write('<iframe id="store" src="/favicon.ico"></iframe>'); //添加storeContainerDocument.close(); //关闭//IE6 IE7 IE8 允许在 document 上插入元素,可以确保代码的同步执行。var storeDocument = storeContainerDocument.getElementById('store').contentWindow.document;storeElement= storeDocument.appendChild(storeDocument.createElement('var'));}catch(e) {//若创建失败,则仅实现不能跨路径的 userData 访问。storeElement =document.documentElement;}//添加行为。storeElement.addBehavior('#default#userData');//--------------------------------------------------[localStorage.getItem]/*** 从 localStorage 中读取一条数据。* @name localStorage.getItem* @function* @param {string} key 数据名。* @returns {?string} 数据值。*   如果指定的数据名不存在,返回 null。*/localStorage.getItem= function(key) {storeElement.load(STORE_NAME);returnstoreElement.getAttribute(key);};//--------------------------------------------------[localStorage.setItem]/*** 在 localStorage 中保存一条数据。* @name localStorage.setItem* @function* @param {string} key 数据名,不能为空字符串。* @param {string} value 数据值。* @description*   注意:与原生的 localStorage 不同,IE6 IE7 的实现不允许 `~!@#$%^&*() 等符号出现在 key 中,可以使用 . 和 _ 符号,但不能以 . 和数字开头。*/localStorage.setItem= function(key, value) {storeElement.load(STORE_NAME);storeElement.setAttribute(key, value);storeElement.save(STORE_NAME);};//--------------------------------------------------[localStorage.removeItem]/*** 从 localStorage 中删除一条数据。* @name localStorage.removeItem* @function* @param {string} key 数据名。*/localStorage.removeItem= function(key) {storeElement.load(STORE_NAME);storeElement.removeAttribute(key);storeElement.save(STORE_NAME);};//--------------------------------------------------[localStorage.clear]/*** 清空 localStorage 中的所有数据。* @name localStorage.clear* @function*/localStorage.clear= function() {var attributes =Array.from(storeElement.XMLDocument.documentElement.attributes);storeElement.load(STORE_NAME);attributes.forEach(function(attribute) {storeElement.removeAttribute(attribute.name);});storeElement.save(STORE_NAME);};

总之就是先创建一个userData对象,然后使用它的操作封装到localStorage的一些方法里面。

参考资料:

OurJS】: https://github.com/s79/OurJS/blob/gh-pages/src/browser.js

推技术ActiveXobject("htmlfile") 长连接】: http://www.cnblogs.com/my_life/articles/2749709.html

【JavaScript本地存储实践】: http://www.css88.com/archives/3717

转载于:https://www.cnblogs.com/cubika/p/3486094.html

HTML5本地存储localstorage相关推荐

  1. HTML5 本地存储 localstorage 安全分析

    在HTML5本地存储出现以前,WEB数据存储的方法已经有很多,比如HTTP Cookie,IE userData,Flash Cookie,Google Gears.其实再说细点,浏览WEB的历史记录 ...

  2. HTML5本地存储localStorage,sessionStorage

    HTML5新特性,用于本地存储, localStorage:不删除会一直存在斯基 sessionStorage:浏览器关掉,就跪了 /*** H5:数据存储方式,可以携带用户信息id* * 注意:* ...

  3. HTML5本地存储 localStorage

    HTML5的本地存储是大势所趋,如果仅存储在内存中,则是sessionStorage,他们的语法都是一样,仅仅是一个存储在本地文件系统中,另一个存储在内存中(随着浏览器的关闭而消失),其语句如下: l ...

  4. HTML5 本地存储和内容按需加载的思路和方法

    HTML5 本地存储和内容按需加载的思路和方法 作者:佚名 字体:[增加 减小] 来源:互联网 时间:04-07 16:05:09 我要评论 本文将着重介绍HTML5本地存储和内容按需加载的思路和方法 ...

  5. HTML5之本地存储localstorage

    Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多,cookie大小被限制在4KB,Web Sto ...

  6. Cocos本地存储LocalStorage

    HTML5 LocalStorage 本地存储 //存档var stopResumeMenu4 = cc.MenuItemFont.create("存档", this.onSave ...

  7. HTML5 本地存储

    HTML5 本地存储 1.sessionStorage 2.localStorage 3.Database Storage 4.globalStorage 5.兼容性 参考文献 本地持久化存储一直是本 ...

  8. HTML5本地存储之Web Storage篇

    2019独角兽企业重金招聘Python工程师标准>>> Web Storage是HTML5引入的一个非常重要的功能,在前端开发中经常用到,可以在客户端本地存储数据,类似HTML4的c ...

  9. HTML5本地存储不完全指南

    历史 在HTML5本地存储之前,如果我们想在客户端保存持久化数据,有这么几个选择: HTTP cookie.HTTP cookie的缺点很明显,最多只能存储4KB的数据,每个HTTP请求都会被传送回服 ...

最新文章

  1. python领域有什么用-Python语言被广泛用在哪些领域了?
  2. Python自动解压各种压缩文件
  3. LinCode落单的数
  4. postman测试带权限接口_接口测试工具:postman
  5. 【转】JAVA中的转义字符
  6. 位图像素的颜色 携程编程大赛hdu
  7. cf两边黑屏怎么解决win10_关闭自动睡眠仍然睡眠?Win10过几分钟就会自动睡眠黑屏解决方法...
  8. 河北大学计算机专业调剂,【计算机考研调剂】河北大学2021级硕士研究生预调剂信息统计的通知...
  9. 线上lnmp环境快速安装
  10. 高性能缓存服务器Varnish架构配置
  11. 爬虫项目三:爬取选课信息
  12. 微金融php源码下载,ThinkPHP金融微盘微交易系统平台源码
  13. J2EE的13种核心技术简介
  14. C# 控件BackColor = Color.Transparent没有透明的原因
  15. Mongodb下载、安装、配置与使用
  16. 基于Gromacs的蜘蛛毒素肽显性溶剂动力学分析
  17. python实现虚拟键盘
  18. 不一样的国外广告联盟与cpa赚钱!
  19. 工业设备软件的研发测试
  20. Laravel—Purifier扩展包防止XSS攻击

热门文章

  1. ps -aux返回超过100%
  2. WinCE/Mobile上下滑动浏览DataGrid数据 【转】
  3. http和HTTPS的区别及SSL介绍
  4. regression
  5. 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale...
  6. 图论数学:矩阵树定理
  7. Django之session
  8. 关于在线预览word,excel,ppt,pdf的需求处理方法。
  9. 【leetcode】Intersection of Two Linked Lists
  10. C# 正则表达式过滤危险HTML