WebStorage


2019-11-13  10:46:18  by冲冲

1. 概况

  • 早期浏览器的本地存储使用cookie,当前推荐使用Web Storage。
  • Web Storage的数据以"键/值对"存在,Web网页的数据只允许该网页访问使用。

2. 浏览器支持

  • Internet Explorer 7 及更早IE版本不支持Storage。
  • IE8+、FireFox、Opera、Chrome、Safari已经支持Storage。
  • 使用storage之前,应该检查浏览器是否支持Storage。
1 if(typeof(Storage)!=="undefined")
2 {
3 // 支持localStorage和sessionStorage对象
4 // 业务代码.....
5 } else {
6 // 不支持web存储
7 }

3. Storage分类

  • localStorage:用于长期保存该网站的数据,数据的存储时间没有限制,直到手动去除。
  • sessionStorage:用于临时保存该网站的数据,在关闭窗口或标签页之后将会删除这些数据

4. Storage作用域

作用域:隔离开不同页面之间的localStorage(例如:百度页面不能读到腾讯页面的localStorage)。

  • localStorage作用域:相同的协议、相同的主机名、相同的端口。
  • sessionStorage作用域:相同的协议、相同的主机名、相同的端口、相同窗口/浏览器标签页。

5. API

localStorage和sessionStorage使用的API相同,常用的有(以localStorage为例)

① 保存数据:localStorage.setItem(key,value);

② 读取数据:localStorage.getItem(key);

③ 删除单个数据:localStorage.removeItem(key);

④ 删除所有数据:localStorage.clear();

⑤ 得到某个索引的key:localStorage.key(index);

1 // 存储
2 localStorage.sitename = "菜鸟教程";
3 // 查找
4 document.getElementById("result").innerHTML = localStorage.sitename;
5 // 移除
6 localStorage.removeItem("sitename");

6. 数据类型

键/值对通常以字符串存储,可以按需要转换数据类型。

 1 // 该实例展示用户点击按钮的次数,期望将代码中的字符串值转换为数字类型
2 if (localStorage.clickcount)
3 {
4 localStorage.clickcount=Number(localStorage.clickcount)+1;
5 }
6 else
7 {
8 localStorage.clickcount=1;
9 }
10 document.getElementById("result").innerHTML=" 你已经点击按钮 " + localStorage.clickcount + " 次 ";

7. sessionStorage

sessionStorage方法针对一个session进行数据存储。当用户关闭浏览器窗口后,数据会被删除。

1 if (sessionStorage.clickcount)
2 {
3 sessionStorage.clickcount=Number(sessionStorage.clickcount)+1;
4 }
5 else
6 {
7 sessionStorage.clickcount=1;
8 }
9 document.getElementById("result").innerHTML="在这个会话中你已经点击该按钮 " + sessionStorage.clickcount + " 次 ";

8. 应用实例

 1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <title>HTML5本地存储之WebStorage</title>
6 </head>
7 <body>
8 <div style="border: 2px dashed #ccc;width:320px;text-align:left;">
9 <label for="keyname">别名(key):</label>
10 <input type="text" id="keyname" name="keyname" class="text"/>
11 <br/>
12 <label for="sitename">网站名:</label>
13 <input type="text" id="sitename" name="sitename" class="text"/>
14 <br/>
15 <label for="siteurl">网 址:</label>
16 <input type="text" id="siteurl" name="siteurl"/>
17 <br/>
18 <input type="button" onclick="save()" value="新增记录"/>
19 <hr/>
20 <label for="search_phone">输入别名(key):</label>
21 <input type="text" id="search_site" name="search_site"/>
22 <input type="button" onclick="find()" value="查找网站"/>
23 <p id="find_result"><br/></p>
24 </div>
25 <br/>
26 <div id="list">
27 </div>
28 <script>
29 //保存数据
30 function save(){
31 var site = new Object;
32 site.keyname = document.getElementById("keyname").value;
33 site.sitename = document.getElementById("sitename").value;
34 site.siteurl = document.getElementById("siteurl").value;
35 var str = JSON.stringify(site); // 将对象转换为字符串
36 localStorage.setItem(site.keyname,str);
37 alert("保存成功");
38 }
39 //查找数据
40 function find(){
41 var search_site = document.getElementById("search_site").value;
42 var str = localStorage.getItem(search_site);
43 var find_result = document.getElementById("find_result");
44 var site = JSON.parse(str);
45 find_result.innerHTML = search_site + "的网站名是:" + site.sitename + ",网址是:" + site.siteurl;
46 }
47
48 //将所有存储在localStorage中的对象提取出来,并展现到界面上
49 //确保存储的 keyname 对应的值为转换对象,否则JSON.parse会报错
50 function loadAll(){
51 var list = document.getElementById("list");
52 if(localStorage.length>0){
53 var result = "<table border='1'>";
54 result += "<tr><td>别名</td><td>网站名</td><td>网址</td></tr>";
55 for(var i=0;i<localStorage.length;i++){
56 var keyname = localStorage.key(i);
57 var str = localStorage.getItem(keyname);
58 var site = JSON.parse(str);
59 result += "<tr><td>"+site.keyname+"</td><td>"+site.sitename+"</td><td>"+site.siteurl+"</td></tr>";
60 }
61 result += "</table>";
62 list.innerHTML = result;
63 }else{
64 list.innerHTML = "数据为空...";
65 }
66 }
67 </script>
68 </body>
69 </html>

参考:https://www.runoob.com/html/html5-webstorage.html

【HTML】WebStorage的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  6. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  7. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

随机推荐

  1. Docker 常见命令

    Docker 运行流程 辅助命令 # 1.安装完成辅助命令 docker version -------------------------- 查看docker的信息 docker info ---- ...

  2. programmercarl——数组——二分查找

    二分查找,在经过: 34--https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-arr ...

  3. Java:多线程计数

    Java:多线程计数 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 ...

  4. UltraSoft - Beta - 项目展示

    UltraSoft - DDL Killer - Beta 项目展示 团队介绍 CookieLau fmh 王 FUJI LZH DZ(转出) Monster hdl(转入) PM & 后端 ...

  5. [对对子队]会议记录5.24(Scrum Meeting10)

    今天已完成的工作 梁河览 ​ 工作内容:修改第一关的新手引导 ​ 相关issue:优化初步导出版本 ​ 相关签入:fix:改进第一关的新手引导 何瑞 ​ 工作内容:为加速按钮添加锚点 ​ 相关issu ...

  6. BUAA2020软工作业(二)——对软件工程的初步理解

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面帮助 ...

  7. Spring Cloud Gateway 网关限流

    Spring Cloud Gateway 限流 一.背景 二.实现功能 三.网关层限流 1.使用默认的redis来限流 1.引入jar包 2.编写配置文件 3.网关正常响应 4.网关限流响应 2.自定 ...

  8. eureka服务端的高可用

    eureka client的高可用这个很简单,只需要向eureka服务端上多注册几个实例即可,那么eureka server端如何实现高可用呢?其实eureka server 端也是可以做为一个客户端 ...

  9. Noip模拟21(持续翻车)2021.7.20

    读题总是读错是不是没救了... T1 Median 中位数:按顺序排列的一组数据中居于中间位置的数. 能用上的高亮符号都用上了... 当时忘了就离谱.... 理解什么是中位数(真是个憨憨)后就可以开始 ...

  10. 广域网(ppp协议、HDLC协议)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105028759 学习课程:<2019王道考研计算机网络> 学习目的 ...