sessionStorage与localStorage用法详解

sessionStorage与localStorage二者都是H5新增的api用于本地存储

sessionStorage:仅在当前会话下有效,关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。源生接口可以接受,亦可再次封装来对Object和Array有更好的支持。

localStorage:生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

 

浏览器兼容性:大家用的时候参照这张图

如果要做判断浏览器是否支持的话可以这样写:

if(window.localStorage){
    alert("支持");
}else{
    alert("不支持");
}
 

 

接下来介绍一下常用的方法(增删改查):

 

sessionStorage.setItem("key","val");//新增一个本地存储
sessionStorage.getItem("key");//取得相对应的存储
sessionStorage.removeItem("key");//移除某个本地存储
sessionStorage.clear();//清空所有的本地存储

localStorage.setItem("key","val");//新增一个本地存储
localStorage.getItem("key");//取得相对应的存储
localStorage.removeItem("key");//移除某个本地存储
localStorage.clear();//清空所有的本地存储
 

 

 

 

接下来我们再思考一个问题:如果我在一个页面中修改了某个key的值并且想让另一个打开的页面也能监听到这个改变并修改,那么我们应该怎样实现呢?其实localStorage已经给我们提供了一个storage监听事件。

 

引用《h5移动web开发指南》上的话:

“当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了storage事件,就会触发”

所以,localStorage的例子运行需要如下条件:

  • 同一浏览器打开了两个同源页面
  • 其中一个网页修改了localStorage
  • 另一网页注册了storage事件

在事件处理函数中,触发事件的事件对象(event参数值)具有如下几个属性

event.key 属性:属性值为在 session 或 localStorage 中被修改的数据键值。 
event.oldValue 属性:属性值为在 sessionStorage 或 localStorage 中被修改的值。 
event.newValue 属性:属性值为在 sessionStorage 或 localStorage 中被修改后的值 
event.url 属性:属性值为修改 sessionStorage 或 localStorage 中值的页面的URL地址 
event.storageArea 属性 : 属性值为被变动的 sessionStorage 对象或 localStorage 对象

接下来我会写两个页面来展示一下具体的用法:

页面A:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>页面A</title>
</head>
<body>
<form>
    <div><input type="text" placeholder="name" id="name"></div>
    <div><input type="password" placeholder="password" id="pass"></div>
    <button type="button" id="btn">确定</button>
</form>
<script>
    localStorage.setItem("userName","aaa");
    localStorage.setItem("userPass","123");
    btn.onclick=function(){
        var name=document.getElementById("name").value;
        var pass=document.getElementById("pass").value;
        var btn=document.getElementById("btn");
        if(name==""){
            alert("请输入用户名!");
            return false;
        }else if(pass==""){
            alert("请输入密码!");
            return false;
        }else{
            localStorage.setItem("userName",name);
            localStorage.setItem("userPass",pass);
           // window.location.href="B.html";
        }
    }
</script>
</body>
</html>

 

 

页面A打开之后的效果图是这样的:浏览器中存储了我们默认的userName和userPass的值

再看页面B.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>页面B</title>
</head>
<body>
<script>
    window.addEventListener("storage",function(e){
        console.log("e:"+e);
        console.log("key:"+e.key);
        console.log("oldValue:"+e.oldValue);
        console.log("newValue:"+e.newValue);
        console.log("src:"+e.src);
        console.log("url:"+e.url);
        console.log("storageArea:"+e.storageArea);
    })
</script>
</body>
</html>
 

效果图:没有显示出存储的两个值

 

当我们点击了A页面中的按钮改变了默认的存储值后再去页面B(注意:不要刷新页面B)看看会出现什么情况

此时再页面无刷新的情况下也获取到了改变后的值,这就是因为在这个页面已经注册了storage监听事件。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值