问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js 有什么优雅的办法实现在同时打开的两个标签页间

发布网友 发布时间:2022-04-23 13:28

我来回答

2个回答

懂视网 时间:2022-04-23 17:49

  在写页面的时候有时会遇到这样的需求,需要两个页面之间传递数据或者一个事件。这个时候,就需要用到我今天所要讲的storage事件,学习这个事件之前,需要先了解localStorage的用法。具体用法可以查看其他文档。出发storage事件的条件如下:

  1. 同一个浏览器打开了两个同源的页面

  2. 一个网页中修改localStorage

  3. 另一网页注册了storage事件

  storage事件,只有在同源页面下,才有作用,不同源是没有作用的。那么什么是同源呢?

  URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。举个栗子:


1 
2 //这个网址,协议是 
3 
4 //对比URL:
5 http://www.wszdaodao.cn/demo2/other.html //同源
6 http://www.wszdaodao.cn:81/demo/index.html //不同源
7 http://sxh.wszdaodao.cn/demo/index.html //不同源
8 http://www.mamama.cn/demo/index.html  //不同源

  所以在测试时候,一定要保证是同源页面。

  下面是两页面间交互代码,实现非常简单,pageA与pageB之间通信。

page A : 设置localStorage

<!DOCTYPE html>
<html>
<head>
<title>page A</title>
</head>
<body>
<button>click<button>
</body>
<script>
 document.querySelector('button').onclick = function(){
  localStorage.setItem('Num', Math.random()*10);
 }
</script>
</html>

page B: 监听storage事件

<!DOCTYPE html>
<html>
<head>
 <title>page B</title>
</head>
<body>
<script>
 window.addEventListener("storage", function (e) {
 console.log(e)
 console.log(e.newValue)
 });
</script>
</body>
</html>


热心网友 时间:2022-04-23 14:57

浏览器同时打开两个同域名的网页,他们的localStorage是共享的,不仅如此,他们之间的localStorage值改变也是可以监听的。同域的a和b两个页面,a页面发生localStorage.set('abc', 123),b页面可以通过如下方式监听变化:
window.addEventListener("storage", function(e){
console.log('key:', e.key); // "abc"
console.log('oldValue:', e.oldValue); // null
console.log('newValue:', e.newValue); // 123
});
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 海信智能电视怎么看新闻联播直播 删除微信好友不记得怎么加回来? 误删微信好友没有电话,,怎样添加回来- 问一问 我在成都税务公众号中查到我九月份的医保未交,我又在社保网上查询到我的医保已交。这是为什么呀? 捷信手机分期逾期了 然后上征信了 然后还了之后可以取消征信不?? 成都税务公众号医保缴费步骤 养乐多的成份是什么??? 养乐多超市为什么下架了? 养乐多是哪个国家的 养乐多是什么? 今天为什么成都税务公众号不能缴费 养乐多是哪个国家生产的? 把好友删除 没有 只有转账记录 怎么加回来 第一次开票,抄报税是什么流程啊,意思都不理解,怎么办呐? 养乐多是哪国的? 起个名字叫晨丞行吗 测量简支梁或悬臂粱的挠度和弯矩时,测点如何布置?实际挠度的计算方法如何? 悬臂梁的最大弯距怎么计算,公式 为什么胶水粘在橡皮筋之后橡皮筋很容易断 如何开一家全屋定制家具加盟店? 请问你们说的郑州中心站(南)是不是郑州长途客运南站? 郑州汽车南站和中心站不在同一位置吗? 郑州汽车南站到郑大一附院坐几路公交车 从郑州东站到郑州汽车南站坐的士要多长时间? 郑州长途汽车中心南站离郑州火车站多远 从郑州火车站到郑州大学西亚斯国际学院怎么乘车? 从郑州南站下车到哪能坐上到火车站的车 想知道: 郑州市 从郑州南站到新郑市怎么坐车,是哪个南站是长途客运南站还是郑州南站,还是新万客来南站, 郑州客运南站至郑州金融学校有多远坐几路公交 现在郑州客运站南站有到开封的车么~? 郑州长途汽车新北站到客运南站怎么走 从郑州长途客运南站到大学路与中原路交叉口应乘坐几路公交车?谢谢! 从郑州长途客运南站怎么到东建材? 公积金贷款找担保公司的问题 郑州市汽车南站到省人民医院怎么走 郑州汽车站、南站距离火车站有多远?坐几路公交车可以到? 贷款买房找了担保人还需要再找担保公司吗 一天12个小时都在那里看电视,对身体有哪些危害? 贷款买房找担保公司是谁出钱,中价找找的 买房公积金贷款找担保人合适还是担保公司合适