前端跨界面之间的通信解决方案

主要是这两个方案,其他的,还有 SharedWorkerIndexedDBWebSocketService Worker
如果是,父子嵌套 iframe 还可以使用 window.parent.postMessage(“需要传递的参数”, ‘*’)

1、localStorage

核心点

  1. 同源,不能跨域(协议、端口、域名三者有一个不一样)
  2. 使用storage事件监听localStorage变化

示例代码
pageA 界面

<body><h1>1、localStorage</h1><h2>pageA</h2><script>window.addEventListener("storage", (e) => {console.info("localStorage发生变化:", e)})</script>
</body>

pageB 界面

<body><h1>1、localStorage</h1><h2>pageB</h2><button id="btnB">添加数据到 localStorage</button>
</body>
<script>let btnB = document.getElementById("btnB");let num = 0;btnB.addEventListener("click", () => {localStorage.setItem("num", num++)})
</script>

当在 B界面上,点击添加的时候,A界面会输出结果

在这里插入图片描述

2、BroadcastChannel

核心点

在这里插入图片描述

  1. 同源
  2. 两个界面,务必保证频道名称一样

示例代码
pageA界面

<body><h1>1、localStorage</h1><h2>pageA</h2><h1>2、BroadcastChannel</h1><span id="span2">发送广播</span><script>window.addEventListener("storage", (e) => {console.info("localStorage发生变化:", e)})document.querySelector('#span2').addEventListener('click', () => {// 创建 某个频道var bc = new BroadcastChannel("test_channel");bc.postMessage({ msg: "A界面发送来的" })})</script>
</body>

pageB 界面

<body><h1>1、localStorage</h1><h2>pageB</h2><button id="btnB">添加数据到 localStorage</button>
</body>
<script>let btnB = document.getElementById("btnB");let num = 0;btnB.addEventListener("click", () => {localStorage.setItem("num", num++)})var bc = new BroadcastChannel("test_channel");bc.onmessage = function (ev) {console.log('收到了消息', ev);};
</script>

在这里插入图片描述

window.parent.postMessage

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><iframe src="./son.html" frameborder="0"></iframe><script>//监听单个事件window.addEventListener('message', function (msg) {console.log(msg, '发生了变化')})</script>
</body></html>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><h2>发送请求</h2><script>// window.parent 是 iframe 子页面获取父页面的 window 对象document.querySelector('h2').addEventListener('click',()=>{window.parent.postMessage("需要传递的参数", '*')})// 后面的 * 号就是处理跨域问题的,任何域名都不会出现跨域问题// 也可以指定传送域名地址,这个域名不会出现跨域问题,写父页面(接收)域名地址// window.parent.postMessage("需要传递的参数", 'http://0.0.0.0:8080')// 传递的参数可以是数组,对象,字符串等</script>
</body></html>

3、参考连接

BroadcastChannel MDN 介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178873.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在docker下安装suiteCRM

安装方法&#xff1a; docker-hub来源&#xff1a;https://hub.docker.com/r/bitnami/suitecrm curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/suitecrm/docker-compose.yml > docker-compose.yml//然后可以在docker-compose.yml文件里修…

Mysql词法分析实验(二)

表名叫select123能不能创建一个表&#xff1f; 在 MySQL 中&#xff0c;可以创建一个名为 select123 的表&#xff0c;但由于 SELECT 是 MySQL 的一个保留关键字&#xff0c;通常建议避免使用它作为表名的一部分&#xff0c;以防止潜在的解析错误或混淆。如果确实需要使用这样…

缓存穿透、缓存击穿、缓存雪崩

目录 一、缓存的概念 1.为什么需要把用户的权限放入redis缓存 2.为什么减低了数据库的压力呢&#xff1f; 3.那么什么情况下用redis,什么情况下用mysql呢&#xff1f; 4.关于权限存入redis的逻辑&#xff1f; 二、使用缓存出现的三大情况 1.缓存穿透 1.1概念 1.2出现原…

五年制专转本备考中如何进行有效的自我管理

时间管理 0 1 一天中的4个记忆黄金时间 清晨起床后&#xff0c;适合学习难以记忆的内容&#xff1b;8&#xff1a;00—10&#xff1a;00&#xff0c;适宜学习需要周密思考、分析判断的内容&#xff0c;是攻克难题的最佳时间&#xff1b;18&#xff1a;00后的两个小时&#x…

MXNet中图解稀疏矩阵(Sparse Matrix)的压缩与还原

1、概述 对于稀疏矩阵的解释&#xff0c;就是当矩阵里面零元素远远多于非零元素&#xff0c;且非零元素没有规律&#xff0c;这样的矩阵就叫做稀疏矩阵&#xff0c;反过来就是稠密矩阵&#xff0c;其中非零元素的数量与所有元素的比值叫做稠密度&#xff0c;一般稠密度小于0.0…

今年跳槽成功测试工程师原来是掌握了这3个“潜规则”

随着金九银十逐渐进入尾声&#xff0c;还在观望机会的朋友们已经开始焦躁&#xff1a;“为什么我投的简历还没有回音&#xff1f;要不要趁现在裸辞好好找工作&#xff1f;” “金九银十”作为人们常说的传统“升职加薪”的黄金季节&#xff0c;也是许多人跳槽的理想时机。然而…

云原生下GIS服务规划与设计

作者&#xff1a;lisong 目录 背景云原生环境下GIS服务的相关概念GIS服务在云原生环境下的规划调度策略GIS服务在云原生环境下的调度手段GIS服务在云原生环境下的服务规划调度实践 背景 作为云原生GIS系统管理人员&#xff0c;在面对新建的云GIS系统时&#xff0c;通常需要应对…

【Rust】快速教程——从hola,mundo到所有权

前言 学习rust的前提如下&#xff1a; &#xff08;1&#xff09;先把Rust环境装好 &#xff08;2&#xff09;把VScode中关于Rust的插件装好 \;\\\;\\\; 目录 前言先写一个程序看看Rust的基础mut可变变量let重定义覆盖变量基本数据类型复合类型&#xff08;&#xff09;和 [ …

Java中的继承

文章目录 前言一、为什么需要继承二、继承的概念三、继承的语法四、父类成员访问4.1子类中访问父类的成员变量1.子类和父类不存在同名成员变量2.子类和父类成员变量同名 4.2子类中访问父类的成员方法1.成员方法名字不同2.成员方法&#xff0c;名字相同 五、super和this关键字六…

很多工程师,最后都是被生活裹挟,没法一直在技术路径走到极致

最近比较少更了&#xff0c;但内容一直在写&#xff0c;只是从长文变成了短文&#xff0c;直接发朋友圈了。 如果喜欢我写的内容&#xff0c;请移步到朋友圈。 我是一个不喜欢讲哲理的人&#xff0c;感觉哲学都是理论&#xff0c;都是鸡血&#xff0c;很难落地&#xff0c;我…

有效数字(表示数值的字符串),剑指offer,力扣

目录 题目地址&#xff1a; 我们直接看题解吧&#xff1a; 难度分析&#xff1a; 解题方法&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 题目地址&#xff1a; LCR 138. 有效数字 - 力扣&#xff08;LeetCode&#xff09; 难度&#xf…

MySQL 分库分表与 TiDB(平凯数据库),如何选择?

随着互联网行业的飞速发展&#xff0c;数据量不断增长&#xff0c;传统的关系型数据库已经无法满足大规模数据处理的需求。为了解决这一问题&#xff0c;分库分表和分布式数据库应运而生。本文将对比分析 MySQL 分库分表和 TiDB 这两种解决方案&#xff0c;帮助大家更好地选择适…