localStorge它storage事件

简介:

随着h5患病率和mobile发展。localStorage它不再是一个陌生的词汇。我相信大多数童鞋进行了联系,并用它。但storage事件相信有很多童鞋不清晰甚至没有接触。今天我们主要谈storage。


看w3c大约storage都描写叙述:

4.4 The storage event


The storage event is fired when a storage area changes, as described in the previous two sections (for session storage, for local storage).


When this happens, the user agent must queue a task to fire an event with the name storage, which does not bubble and is not cancelable, and which uses the StorageEvent interface, at each Window object whose Document object has a Storage object that is affected.

它说得非常清晰,当存储的storage数据发生变化时都会触发它,可是它不同于click类的事件会冒泡和能取消。同一时候最后这句才是重点,storage改变的时候,触发这个事件会调用全部同域下其它窗体的storage事件。只是它本身触发storage即当前窗体是不会触发这个事件的(当然ie这个特例除外,它包括自己本事也会触发storage事件)。

这句话说的有点绕口。看代码把。


DEMO:

页面a下,有个input框用来存储store,它自身绑定了storage事件。这个时候写入新的数据点击保存,这时新的sotre数据保存了,可是页面a的storage事件没触发,

而页面b下,绑定的storage事件则触发了。(ps:前提页面a和b在同域下,并都是打开状态不同窗体);

页面a代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<body>
<input type="text" placeholder="input date to save">
<button>save</button>
<script>
  (function(D){
    var val = D.getElementsByTagName("input")[0],
      btn = D.getElementsByTagName("button")[0];
    btn.onclick = function(){
      var value = val.value;
      if(!value) return;
      localStorage.setItem("key", val.value);
    };
    window.addEventListener("storage", function(e){
      console.log(e);
    });
  })(document);
</script>
</body>
</html>

页面b代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<body>
<script>
  window.addEventListener("storage", function(e){
    console.log(e);
    document.write("oldValue: "+ e.oldValue + " newValue:" + e.newValue)
  });

</script>
</body>
</html>

看到这里是不是非常疑惑那storage事件究竟有什么用,多窗体间多通信用到它就是最好选择了,比方某块公用内容区域基础数据部分都是从store中提取的,这个区域中大多数页面中都有,当用户打开多个页面时。在当中一个页面做了数据改动。那其它页面同步更新是不是非常方便(当前页面就要用其它方式处理了),当然用于窗体间通信它作用不只如此,很多其它的大家能够利用它特性去发挥。

ps:

顺带补充下,在上面的demo页面b中storage的events对象的属性经常使用的例如以下: 

 oldValue:更新前的值。假设该键为新添加,则这个属性为null。 

 newValue:更新后的值。假设该键被删除。则这个属性为null。

 url:原始触发storage事件的那个网页的网址。

 

 key:存储store的key名。


另外store虽好可不要贪“杯”噢。大量冗最后但并非不是数据存储灾难更。和store安全性有限,还要注意的是关键数据。

版权声明:本文博客原创文章。博客,未经同意,不得转载。







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4731799.html,如需转载请自行联系原作者


相关文章
|
应用服务中间件 API nginx
Nginx到底是怎么转发的
Nginx到底是怎么转发的
199 1
|
消息中间件 Java Kafka
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
336 1
|
人工智能 机器人
【好玩AI】【Prompt】情人节了,用GPT写个【骂醒恋爱脑】的机器人跟自己对话吧
【好玩AI】【Prompt】情人节了,用GPT写个【骂醒恋爱脑】的机器人跟自己对话吧
692 0
github无法访问或速度慢的问题几个解决方案总结
github无法访问或速度慢的问题几个解决方案总结
1185 0
|
Java 测试技术 监控
『StabilityGuide』| 10+位阿里技术专家共同发起稳定性知识库开源项目
我们穿过山和大海,也见过人山人海。我们见过各类故障,也排过千雷万险。这一次,不如我们一起,开启稳定性的探索之旅。让无法解决的问题少一点点,让世界的确定性多一点点。 无论是前端业务的开发者,还是后端架构的开发者,都会遇到业务稳定性的难题。
6247 88
|
前端开发 JavaScript NoSQL
Vue+SpringBoot打造学生综合素质评价系统
Vue+SpringBoot打造学生综合素质评价系统
538 0
|
IDE 搜索推荐 Java
学生获取免费正版JB授权的方式
JB全称JetBrains 是一家专注于创建智能开发工具的前沿软件公司,其出品的IDE有着现代化的体验,在学界和业界广受欢迎。
2406 0
|
Android开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
综述   retrofit是由square公司开发的。square在github上发布了很多优秀的Android开源项目。例如:otto(事件总线),leakcanary(排查内存泄露),android-times-square(日历控件),dagger(依赖注入),picasso(异步加载图片),okhttp(网络请求),retrofit(网络请求)等等。
1638 0
|
自然语言处理 算法 Java
pyhanlp 中文词性标注与分词简介
如果想要只获取词性也是可以的,因为原分词器返回的是Java中的ArrayList属性,list中的每个单元都是一个term类,因此我们也可以通过获取term中的word字段来直接获取词语,或者nature属性,直接获取词性。这一特征,我们在之后也会用到。
4632 0