对HTML5中LocalStorage的一些使用建议
admin
2023-01-30 06:25:31
0次

上个月末的w3ctech上,有同行提到了LocalStorage这个话题,我觉得在HTML5的众多新特性中,LocalStorage算是比较实际同时浏览器也比较好实现的特性。


LocalStorage的规范描述在这里:http://dev.w3.org/html5/webstorage/


首先一个细节,LocalStorage只能存储键值对(key-value pair)形式的数据,并且key和value都只能存储为字符串类型。之所以这样说,因为JS是动态语言,我们可以在setItem时传入int型数据(比如localStorage.setItem("a", 1)),但是它会转换成字符串之后再进行存储和准备随时调用,当我们用getItem访问"a"时(localStorage.getItem("a")),得到的是字符串"1"而非数字1。


第二,虽然localStorage[key] = value的写法主流的浏览器都是支持的,但标准里并没有明确的要求,所以不推荐这样书写代码。而且很显而易见的问题是:对length、setItem、getItem、clear这样的key进行读写是会产生问题的。假如我们执行:


localStorage.setItem = null;

localStoarge.removeItem = null;

localStorage.clear = null;

那么整个LocalStorage的接口完备性将会遭到破坏。


当然,对JS比较熟悉的童鞋可以思考一个附加的变态问题,执行了上述代码之后,localStorage还有没有办法恢复正常呢?


第三,如果我们不想存储字符串,而是类型更丰富结构更复杂的数据,我们推荐大家和JSON的相关函数JSON.parse/JSON.stringify配合使用。这样我们可以方便复杂数据结构和字符串之间的转换,获取数据的时候使用JSON.parse(localStorage.getItem("a")),写入数据的时候使用localStorage.setItem("a", JSON.stringify(obj))。


第四,LocalStorage跟cookies一样是按照域名为单位进行独立存储的,且是有容量上限的(一般为5MB),当我们调用setItem时如果超过容量上限,会触发QuotaExceededError异常。我的经验是,如果你是存文本的,一般碰不到这根线,可以无视;如果用DataURI方式存二进制文件,就需要特别注意了,视频的话,基本没有5MB以下的,所以不会考虑LocalStorage的,也不用特别注意;但如果是图片,很容易几百K的图片多存几张就够5MB了,所以有必要提个醒。当然有些浏览器也会通过提醒用户确认来允许网站使用更多的容量,那个是另一说了。


上述四个建议是我个人使用LocalStorage最常碰到的状况,这里分享给大家。


最后在附送一个“高阶”技巧:window.onstorage事件。其实这也不算多高级,只是用的地方比较少罢了。假如我们同时打开了同域下的多个页面,这时我在一个页面里操作localStorage.setItem、localStorage.removeItem或localStorage.clear,其它同域的页面就会触发这个事件。事件附带的参数是这样的:

window.onstorage = function (event) {

    var key = event.key // 被修改的键名

    var oldValue = event.oldValue // 旧的值

    var newValue = event.newValue // 新的值

    var url = event.url // 触发改变的网页的url

    var storage = event.storageArea // 当前localStorage的引用(当sessionStorage改变时,这里就是当前sessionStorage的引用,好吧扯远了,看不懂可以先无视)

}


这个特性可以帮助我们在多个页面间实现简单的通信、同步和数据交互,比如在一个网站的用户设置页面中修改用户昵称,那么你的所有页面中的昵称也都瞬间改变了。当然,与之产生的注意事项是要回避循环修改,以免浏览器进入死循环。


以上


其实对于LocalStorage还有很多细节,对HTML5感兴趣的童鞋可以进一步挖掘。来年的交流会上,我们一定还会聊到LocalStorage。到那时,我们可以再做更深入的讨论和交流。


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...