本篇文章主要是给小伙伴们介绍利用Storage Event实现页面间通讯的示例代码的相关资料,下面是扣丁学堂HTML5培训小编给你们整理的资料,感兴趣的小伙伴就随小编来了解一下吧,但愿对小伙伴有帮助。html
咱们都知道触发window.onstorage必须知足如下两个条件:浏览器
经过localStorage.setItem或sessionStorage.setItem保存(更新)某个storage微信
保存(更新)这个storage时,它的新值必须与以前的值不一样session
上面的第二个条件,简单来说就是:要么是storage的初始化,由于不存在的storage,其值为null;要么就是对已有storage的更新。函数
举例:学习
// 初始化storage视频
window.localStorage.setItem('a', 123);htm
// 注册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 里面的数据在页面会话结束时会被清除。
想要了解更多关于HTML5开发方面内容的小伙伴,请关注扣丁学堂HTML5培训官网、微信等平台,扣丁学堂IT职业在线学习教育有专业的HTML5讲师为您指导,此外扣丁学堂老师精心推出的HTML5视频教程定能让你快速掌握HTML5从入门到精通开发实战技能。