利用Storage Event实现页面间通信的示例代码


Posted in HTML / CSS onJuly 26, 2018

我们都知道触发window.onstorage必须满足以下两个条件:

  • 通过localStorage.setItem或sessionStorage.setItem保存(更新)某个storage
  • 保存(更新)这个storage时,它的新值必须与之前的值不同

上面的第二个条件,简单来讲就是:要么是storage的初始化,因为不存在的storage,其值为null;要么就是对已有storage的更新

举例:

// 初始化storage
window.localStorage.setItem('a', 123);

// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};

// 更新storage
window.localStorage.setItem('a', 123);

上面的最后一行代码并不会触发onstorage事件,因为a的值并没有变化,前后都是123,所以浏览器判定这次更新是无效的

由于onstorage事件是浏览器触发的,所以如果我们打开了多个相同域名下的页面,并在其中任一一个页面执行window.localStorage.setItem方法(还要保证满足文章开头提到的第二个条件),那么其他页面如果监听了onstorage事件,则这些页面中的onstorage事件回调都会被执行

举例:

// http://www.example.com/a.html
<script>
// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};
</script>
// http://www.example.com/b.html
<script>
// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};
</script>
// http://www.example.com/c.html
<script>
// 触发onstorage事件
window.localStorage.setItem('a', new Date().getTime());
</script>

只要保证c页面在a和b页面之后打开(哪怕三个页面不在同一浏览器窗口,这里需要区别窗口与tab页的区别),那么a和b页面中的onstorage事件都会被触发

现在我们已经知道如何利用storage event实现了页面之间的通信,那么这个通信对于我们有何用途呢?

其实我们只需知道是哪个storage的更新操作触发了onstorage事件就足够了,那么我们如何知道呢?onstorage事件回调和其他事件回调函数一样,也接收一个event对象参数,在这个对象中有3个有用的属性,它们分别是:

  • key 被初始化或更新的storage的键名
  • oldValue 被初始化或更新的storage之前的值
  • newValue 被初始化或更新的storage之后的值

结合这3个关键属性,我们就可以实现页面间的数据同步

最后提一下localStorage与sessionStorage的区别

localStorage 里面存储的数据没有过期时间设置,而存储在 sessionStorage 里面的数据在页面会话结束时会被清除

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css3 线性渐变和径向渐变示例附图
Apr 08 HTML / CSS
css3新增颜色表示方式分享
Apr 15 HTML / CSS
使用CSS3来实现滚动视差效果的教程
Aug 24 HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
Mar 26 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
css3中flex布局宽度不生效的解决
Dec 09 HTML / CSS
基于Html5实现的react拖拽排序组件示例
Aug 13 HTML / CSS
HTML5 Canvas 破碎重组的视频特效的示例代码
Sep 24 HTML / CSS
HTML5 在canvas中绘制矩形附效果图
Jun 23 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
Jan 10 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
Jul 22 HTML / CSS
HTML中link标签属性的具体用法
May 07 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
Jul 24 #HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 #HTML / CSS
html5 input输入实时检测以及延时优化
Jul 18 #HTML / CSS
利用canvas实现图片压缩的示例代码
Jul 17 #HTML / CSS
canvas 如何绘制线段的实现方法
Jul 12 #HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
Jul 12 #HTML / CSS
如何用canvas实现在线签名的示例代码
Jul 10 #HTML / CSS
You might like
浅析php变量修饰符static的使用
2013/06/28 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
require.js的用法详解
2015/10/20 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
全面了解js中的script标签
2016/07/04 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
使用JS动态显示文本
2017/09/09 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
vue实现分页组件
2020/06/16 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
js实现抽奖功能
2020/11/24 Javascript
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python实现抖音视频批量下载
2018/06/20 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
优秀团干部个人事迹
2014/05/29 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
写给导师的自荐信
2015/03/06 职场文书
民间借贷借条范本
2015/05/25 职场文书
学校运动会加油词
2015/07/18 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
利用python调用摄像头的实例分析
2021/06/07 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android