news 2026/8/9 21:49:52

前端跨标签页通信方案(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端跨标签页通信方案(上)

前情

平时开发很少有接触到有什么需求需要实现跨标签页通信,但最近因为一些变故,不得不重新开始找工作了,其中就有面试官问到一道题,跨标签页怎么实现数据通信,我当时只答出二种,面试完后特意重新查资料,因此有些文章

localStorage / sessionStorage

利用localStorage的存储事件实现通信,当一个标签页修改localStorage时,其他同源标签页会触发storage事件

关键代码如下:

标签页1

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>page0-localStorage</title>

</head>

<body>

<button id="setCacheBtn">设置本地缓存</button>

<script>

document.getElementById('setCacheBtn').addEventListener('click', () => {

localStorage.setItem('message', JSON.stringify({

type: 'greeting',

// 这里为了保证通信每次生效,每次都设置不同的值

content: 'Hello from page0.html' + Date.now()

}));

});

</script>

</body>

</html>

标签页2

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>page1-localStorage</title>

</head>

<body>

<script>

window.addEventListener('storage', (e) => {

if (e.key === 'message') {

const data = JSON.parse(e.newValue);

console.log('Received:page1.html', data);

}

});

</script>

</body>

</html>

动图演示:

20250923_193504

提醒:

同源标签才有效

设置不同的本地存储值才有效,如果设置的是同一个缓存值是不会生效的

兼容性非常nice,可以大胆使用了,国内一些浏览器从can i use查不到,但兼容性是没啥问题的

sessionStorage仅在同一标签页的不同 iframe 间有效,不适用于不同标签页

image

BroadcastChannel

专门用于同源标签页通信的 API,创建一个频道后,所有加入该频道的页面都能收到消息

关键代码如下:

标签页1

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>BroadcastChannel0</title>

</head>

<body>

<h1>BroadcastChannel0</h1>

<button id="communication">BroadcastChannel0.html 发送消息</button>

<script>

// 所有页面都创建相同名称的频道

const channel = new BroadcastChannel('my_channel');

// 发送消息

document.getElementById('communication').addEventListener('click', () => {

channel.postMessage({ type: 'update', data: 'new content from BroadcastChannel0.html' });

});

</script>

</body>

</html>

标签页2

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>BroadcastChannel1</title>

</head>

<body>

<h1>BroadcastChannel1</h1>

<script>

// 所有页面都创建相同名称的频道

const channel = new BroadcastChannel('my_channel');

// 接收消息

channel.onmessage = (e) => {

console.log('Received:BroadcastChannel1.html', e.data);

};

</script>

</body>

</html>

演示动图如下:

20250923_200047

提醒:

要通信的标签记得都初始化BroadcastChannel,一定记得使用相同的名称

查询来看除IE外可以大但使用了

image 1

小结

这二种是我面试的时候答出来的,第二种我只是模糊记得跟面试官模棱二可的说了说,面试馆给了正面的回应,呵呵……,此文暂时写这么多,下篇继续探索其它方式……

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 16:19:58

14、网络存储搭建与管理全攻略

网络存储搭建与管理全攻略 在日常使用中,我们常常面临本地系统存储空间不足,却需要存储大量数据的情况。同时,在多系统、多用户的网络环境下,快速共享数据也成为了一个迫切的需求。Linux 系统为我们提供了多种解决方案,如 Samba、NFS 等,能够帮助我们搭建集中式存储服务…

作者头像 李华
网站建设 2026/8/8 9:57:21

GLM-4.6技术突破:200K上下文+工具调用引领智能体新纪元

GLM-4.6技术突破&#xff1a;200K上下文工具调用引领智能体新纪元 【免费下载链接】GLM-4.6 GLM-4.6在GLM-4.5基础上全面升级&#xff1a;200K超长上下文窗口支持复杂任务&#xff0c;代码性能大幅提升&#xff0c;前端页面生成更优。推理能力增强且支持工具调用&#xff0c;智…

作者头像 李华
网站建设 2026/8/9 2:16:31

5分钟搞定PCSX2模拟器:《真实犯罪:纽约》高清优化终极指南

还在为PCSX2模拟器运行《真实犯罪&#xff1a;纽约》时出现的画面模糊、纹理错位而烦恼吗&#xff1f;本文通过快速上手、核心原理到疑难排错的递进式结构&#xff0c;帮你彻底解决高清渲染问题&#xff0c;让你在1080p分辨率下流畅体验这款经典开放世界游戏。 【免费下载链接】…

作者头像 李华
网站建设 2026/8/9 13:20:59

iOS功能开关架构设计:5步构建企业级远程配置系统

iOS功能开关架构设计&#xff1a;5步构建企业级远程配置系统 【免费下载链接】awesome-ios-architecture :japanese_castle: Better ways to structure iOS apps 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-ios-architecture 在当今快速迭代的移动应用开发环…

作者头像 李华
网站建设 2026/8/8 18:55:11

终端AI编程助手:5分钟掌握正则搜索高效定位代码

终端AI编程助手&#xff1a;5分钟掌握正则搜索高效定位代码 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode 在庞大的代码库中快速找到特…

作者头像 李华
网站建设 2026/8/9 2:30:35

Apple Color Emoji 在 Linux 系统中的终极配置指南

Apple Color Emoji 在 Linux 系统中的终极配置指南 【免费下载链接】apple-emoji-linux Apple Color Emoji for Linux 项目地址: https://gitcode.com/gh_mirrors/ap/apple-emoji-linux 想让你的 Linux 系统也能享受苹果设备上那般精美绝伦的彩色表情符号吗&#xff1f;…

作者头像 李华