不同域名的页面进行通信,通过iframe和postMessge进行消息通信

不同域名的页面,通过iframe和postMessge进行消息通信

前言

浏览器不同标签页之间进行消息通信,尤其是当这些标签页位于不同域名时,通常需要使用一些特定的技术或协议来实现。以下是几种可能的方法:

WebSocket:WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许服务器主动向客户端发送消息。因此,你可以在每个标签页中设置一个 WebSocket 客户端,连接到同一个 WebSocket 服务器。当某个标签页需要发送消息时,它可以通过 WebSocket 连接将消息发送到服务器,然后服务器再将消息广播到所有连接的标签页。
Server-Sent Events (SSE):SSE 是一种允许服务器向客户端推送事件的简单技术。与 WebSocket 类似,你可以在标签页中设置一个 SSE 客户端,连接到服务器。服务器可以向所有连接的标签页发送事件。但是,与 WebSocket 相比,SSE 是单向的,只能从服务器发送到客户端。
SharedArrayBuffer 和 Atomics:SharedArrayBuffer 和 Atomics 是 ECMAScript 标准的一部分,它们允许在多个 Worker 或浏览器标签页之间共享内存。你可以使用这些 API 在不同标签页之间传递数据。但是,这种方法需要小心处理并发和同步问题,因为多个标签页可能会同时访问和修改共享内存。
PostMessage API:虽然 PostMessage API 主要用于不同源窗口之间的通信,但你也可以用它来实现不同标签页之间的通信。每个标签页都可以监听来自其他标签页的消息,并在接收到消息时执行相应的操作。然而,这种方法需要手动管理消息的发送和接收,可能会比使用 WebSocket 或 SSE 更复杂。
需要注意的是,由于浏览器的同源策略限制,不同域名的标签页之间不能直接进行通信。因此,上述方法都需要一个中间服务器来转发消息或提供共享资源。另外,这些方法的可用性和性能可能会受到网络条件、服务器性能等因素的影响。

实现代码

父级页面代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>父页面-端口9001</title>
</head>
<body>
父页面
<button onclick="sendToChild()">给子页面发送消息-获取token</button>
<iframe src="http://localhost:9002/children.html" id="childIframe" style="width: 200px;height: 200px"></iframe>
<script><!--  监听消息事件  -->window.addEventListener("message", function (event) {if (event.origin !== 'http://localhost:9002') return;if (event.data && event.data.method === 'getToken') {alert('父页面获取到子页面的token了:'+ event.data.data)}});// 向子页面发送消息function sendToChild() {var childIframeDom = document.getElementById('childIframe')var iframeWindow = childIframeDom.contentWindowiframeWindow.postMessage({method: 'needToken'}, 'http://localhost:9002')}
</script>
</body>
</html>

子级页面代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>子页面-端口9002</title>
</head>
<body>
子页面-可隐藏
<script>window.addEventListener("message", function (event) {if (event.origin !== 'http://localhost:9001') return;if (event.data && event.data.method === 'needToken') {var token = localStorage.getItem('token')// 子页面向父页面发送消息window.parent.postMessage({method: 'getToken', data: token}, 'http://localhost:9001')}});
</script>
</body>
</html>

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

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

相关文章

源聚达科技:抖音店铺2024年卖什么好

随着时代的变迁和科技的进步&#xff0c;消费者的购物习惯与偏好也在不断演变。展望2024年&#xff0c;抖音作为新兴的电商平台&#xff0c;其店铺销售策略需紧跟潮流&#xff0c;才能在激烈的市场竞争中脱颖而出。那么&#xff0c;哪些产品将成为抖音店铺的新宠呢? 首当其冲&…

STM32CubeMax(使用7步)新建工程

现在有时间学习一下STM32用CubeMX新建一个工程的步骤&#xff0c;特此记录一下&#xff1a; 第一步打开STM32CubeMax 第二步搜索芯片型号&#xff1a; 第三步配置时钟&#xff1a; 第四步点选配置时钟源&#xff1a; 第五步填写工程相关的名称路径信息&#xff1a; 第六步选择…

基于SpringBoot3从零配置SpringDoc

基于SpringBoot3从零配置SpringDoc 一、SpringFox二、SpringDoc三、Open API 规范四、SpringBoot3配置Knife4j1.官方参考文档2.添加依赖3.添加配置项4.设置文档首页5.编写控制器6.文档展示 一、SpringFox github SpringFox 已经停止更新了。SpringFox 对 SpringBoot3.0 不适配…

微信小程序开发之Vant组件库

文章目录 环境Vant介绍示例 微信小程序的npm支持安装npm包构建npm 在微信小程序开发中使用Vant准备安装和配置一&#xff1a;安装二&#xff1a;修改app.json三&#xff1a;修改project.config.json四&#xff1a;构建npm包 使用Button组件Calendar组件 参考 环境 Windows 11 …

【开源】基于JAVA+Vue+SpringBoot的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

5G网络eMBB、uRLLC、mMTC

ITU&#xff08;国际电信联盟&#xff09;于2015年9月正式定义了5G的三大应用场景&#xff1a;eMBB&#xff08;增强型移动宽带&#xff09;、uRLLC&#xff08;低时延高可靠通信&#xff09;、mMTC&#xff08;海量物联网通信&#xff09;。 eMBB是4G MBB&#xff08;移动宽带…

【武器工具篇】

Web安全 信息收集 【搜索引擎】 必应&#xff1a;必应 360搜索&#xff1a;360搜索&#xff0c;SO靠谱 俄罗斯搜索引擎&#xff1a;https://yandex.com/ 【子域名收集】 Virus Total&#xff1a;VirusTotal OneForAll&#xff1a;GitCode - 开发者的代码家园 FOFA&…

把Llama2封装为API服务并做一个互动网页

最近按照官方例子&#xff0c;把Llama2跑起来了测试通了&#xff0c;但是想封装成api服务&#xff0c;耗费了一些些力气 参考&#xff1a;https://github.com/facebookresearch/llama/pull/147/files 1. 准备的前提如下 按照官方如下命令&#xff0c;可以运行成功 torchrun -…

【QT+QGIS跨平台编译】之四十二:【QWT+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QWT介绍二、QWT下载三、文件分析四、pro文件五、编译实践5.1 Windows下编译4.2 Linux下编译5.3 MacOS下编译一、QWT介绍 QWT是一个基于Qt框架的开源C++库,用于创建交互式的图形用户界面。它提供了丰富的绘图和交互功能,可以用于快速开发图形化应用程序。 QWT包…

程序员怎么利用chatgpt提高效率

在当今这个数字化时代&#xff0c;AI 技术以各种形式融入到我们的生活和工作中&#xff0c;对于程序员而言&#xff0c;AI 可以成为他们的得力助手。特别是 OpenAI 的 ChatGPT&#xff0c;其深度学习模型在编程领域具有很大潜力。 首先&#xff0c;我们介绍一下 GitHub Copilo…

【Larry】英语学习笔记语法篇——非谓语动词和从句是一回事

目录 非谓语动词和从句是一回事 不定式&#xff1a;名词/形容词/副词 1、不定式 名词属性的不定式&#xff1a;作为主语、表语、宾语 形容词属性的不定式&#xff1a;作后置定语 副词属性的不定式&#xff1a;作状语 副词属性的不定式&#xff1a;作插入语 不定式的逻辑…

【CSS】display:flex和display: inline-flex区别

flex&#xff1a;将对象作为弹性伸缩盒显示 inline-flex&#xff1a;将对象作为内联块级弹性伸缩盒显示 DOM结构 <div class"main"><div></div><div></div><div></div><div></div></div>flex .main{…

记录 | pytorch计算ap的方法

假设当前经过标签数据与预测数据的加载&#xff0c;我们得到了下面两个变量&#xff1a; det_boxes&#xff1a;包含全部图像中所有类别的预测框&#xff0c;其中一个边框包含了[left, top, right, bottom, score, NameofImage]gt_boxes&#xff1a;包含了全部图像中所有类别的…

聚合支付备案机构如何有效应对自律监督现场检查

孟凡富 在2023年第四季度&#xff0c;部分已备案的聚合支付机构收到了中国支付清算协会的《中国支付清算协会自律检查通知书》&#xff0c;标志着对其进行的现场检查工作正式启动。此次检查的时间范围涵盖了机构从2022年9月1日至2023年8月31日的运营情况&#xff0c;内容广泛&…

Uni-App《》

1. 什么是 UniApp&#xff1f;它有什么特点&#xff1f; UniApp 是一个基于 Vue.js 的跨平台应用开发框架&#xff0c;可以使用 Vue.js 的开发语法编写一次代码&#xff0c;然后通过编译生成可以在多个平台&#xff08;包括iOS、Android、H5 等&#xff09;上运行的应用。UniAp…

HTML世界核心

目录 一、基本文档(Basic Documentation) 二、基本标签(Basic Tags) 三、文本格式化(Formatting) 四、链接(Links) 五、图片(Images) 六、样式/区块(Styles/Sections) 七、无序列表(Disorder List) 八、有序列表(Sequence List) 九、定义列表(Definin…

用户空间与内核通信(二)

文章&#xff1a;用户空间与内核通信&#xff08;一&#xff09;介绍了系统调用&#xff08;System Call&#xff09;&#xff0c;内核模块参数和sysfs&#xff0c;sysctl函数方式进行用户空间和内核空间的访问。本章节我将介绍使用netlink套接字和proc文件系统实现用户空间对内…

python入门----基础

这里写目录标题 重点虚拟环境/与//的区别/// 关于print字符串可以用号拼接单双引号转义符换行三引号 变量变量的定义变量名的命名 API库导库以及使用 注释单行注释多行注释 数据类型strboolNoneTypetype函数 交互模式介绍开启 input作用延伸 if-else条件嵌套语句逻辑运算符内容…

信号系统之窗口正弦滤波器

1 Windowed-Sinc 的策略 图 16-1 说明了 windowed-sinc 滤波器背后的思想。在**(a)**中&#xff0c;显示了理想低通滤波器的频率响应。所有低于截止频率 f c f_c fc​ 的频率都以单位振幅通过&#xff0c;而所有较高的频率都被阻挡。通带是完全平坦的&#xff0c;阻带中的衰减…

代码随想录算法训练营第三六天 | 无重叠区间、划分字母区间、合并区间

目录 无重叠区间划分字母区间合并区间 LeetCode 435. 无重叠区间 LeetCode 763.划分字母区间 LeetCode 56. 合并区间 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠…