iframe通信postMessage

iframe跨域通信方法详解window.postMessage 文章目录window.postMessage()用法实例 今天接到个需求,A页面中要嵌入一个iframe,这个iframe是B页面,此时A页面需要得到B页面的一些信息。 window.postMessage() 我们都知道浏览器的同源策略,即对于两个不同页面的脚本,只有当他们的页面具有相同的协议,端口号和主机(document.domain)时,两个脚本才能互相通信。 window.postMes... 阅读详情

iframe嵌入页面是实现微前端的方式之一。由于浏览器的跨域限制,iframe与父页面之间的通信变得不是那么容易。postMessage解决了这个问题。从广义上讲,一个窗口可以获得对另一个窗口的引用(比如 targetWindow = window.parent),然后在窗口上调用 targetWindow.postMessage() 方法分发一个 MessageEvent 消息。

语法

otherWindow.postMessage(message, targetOrigin, [transfer]);

注意: 此处的otherWindow指的是目标页面的一个引用,比如 iframe 的 contentWindow,也就是你想往哪里发送信息,就要使哪里的window。

  • 第一个参数是发送的消息对象;
  • 第二个参数表示目标地址,通过窗口的 origin 属性来指定哪些窗口能接收到消息事件,其值可以是字符串"*"(表示无限制)或者一个 URI。
  • 第三个参数可选,是一串和 message 同时传递的 Transferable 对象。这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。

实例

父传子

父页面通过一个按钮将一条消息发送到嵌入的iframe中,并在iframe中显示该消息
父页面结构

	//页面结构
    <p>mian页面</p>
    <p id="message">iframe发来的消息:</p>
    <p><button id="pButton">发消息</button></p>
    <div class="frameWrap">
        <iframe id='iframe' src="./iframe.html" frameborder="0"></iframe>
    </div>

父页面js代码

   let button = document.querySelector('#pButton')
    let iframe = document.querySelector('#iframe')
    button.addEventListener('click',function(){
        //alert(1)
        iframe.contentWindow.postMessage('父页面发送的消息就是我','*')
    })

子页面iframe的结构

  <div id="content">我是iframe</div>
  <button>发消息</button>

子页面js代码

	//在子页面的window上添加监听message事件,在事件方法中获取消息,并显示
  window.addEventListener('message',function(e){
      document.querySelector("#content").innerHTML = e.data
  })

在这里插入图片描述

子传父

子页面获取父页面window的引用,并发送消息

 let button = document.querySelector('button')
    button.addEventListener('click',e=>{
        window.parent.postMessage('我是子组件发送的消息','*')
    })

父页面监听message事件,并显示出来。

  window.addEventListener('message',e => {
        document.querySelector('#message').innerHTML=e.data
    })

在这里插入图片描述

iframe的使用和 contentWindow、parent以及postMessage通信方式 问题: 如何进行消息通信(父发给子,子接收父的消息,也可父直接调用子的方法; 子发给父,父接收子的消息;) 如何找到指定的子或者父window(如果iframe层级过多),又如何在发送消息时不影响其他的message监听 一、iframe的使用 <iframe style={{border:0,width:"100%",height:630,}} src={src} /> 如何进行消息通信(父发给子,子接收父的消息; 子发给父,父接收子的消息) 方法一: 直接通过获取父或者子的 阅读详情

相关推荐

iframe与父级页面通信方式

如果父页面和iframe是通过框架(如 React、Vue)开发的,可以使用自定义事件机制。' } });iframe});

专注 1707

postMessage 跨域通信 iframe

需求背景: iframe嵌套页面,需要进行参数传递,同时父与子是跨域(跨源)的。 核心方法: window.postMessage() 方法可以安全地实现跨源通信。 otherWindow.postMessage(message, targetOrigin, [transfer]); otherWindow 其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。 message 将要发送到其他

BigOrange的博客 1504

利用postMessage实现iframe跨域通信实战

是一个允许不同源之间安全通信的API。在HTML5规范中被标准化,这个API为跨源交互提供了新的可能性。它的主要目的是在不同源之间安全地传递信息,而不会受到同源策略的限制。通过,无论是在iframe、新窗口还是通过Web Workers,页面都可以与不同的源安全地交换数据。

weixin_36212459的博客 562

利用iframe 等实现两个窗口通信方法之-postMessage

两个窗口的通信问题应该是一个比较常见的问题了,通信可以通过很多种方式,如下: localStorage postMessage websocket 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1.页面和其打开的新窗口的数据传递 2.多窗口之间消息传递 3.页面与嵌套的iframe消息传递 4.上面三个问题的跨域数据传递 postM...

dxj124的博客 2185

Innovus实战:5分钟搞定postRoute阶段冗余hold buffer的自动清理(附PHC识别技巧)

本文分享了在数字IC后端设计中使用Innovus工具,于postRoute阶段自动清理冗余hold buffer的实战技巧。通过配置时序感知的面积回收模式,可在5分钟内安全移除非关键路径上的PHC缓冲器,有效优化芯片面积与功耗,并附有PHC识别与验证方法。

moon9的博客 399

GCC调试黑科技:-fomit-frame-pointer优化下如何保证栈回溯能力

本文深入探讨了GCC编译器在启用`-fomit-frame-pointer`优化选项时如何保证栈回溯能力。通过分析`.eh_frame`段的结构与DWARF调试信息,提供了从编译选项配置到实战调试的完整解决方案,帮助开发者在性能优化与调试能力之间找到最佳平衡点。

u6v7w8x的博客 904

iframe通信——postMessage

postMessage是HTML5中新引入的API,它可以实现跨窗口以及跨域的通信。postMessage类似与Ajax但是它不受同源策略的限制并且通信双方都是客户端。本文的目的就是验证下这种跨页面通信方法的使用流程。

m0_72791534的博客 5273

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 595

postMessage 如何实现跨 iframe 页面通信?

在本文中,我们详细分析了通过 postMessage API 跨 iframe 页面通信的实现方法和技术。无论是同域跨 iframe 通信,还是跨域跨 iframe 通信,以上都提供了常用的解决方案和示例代码。通过 postMessage API,我们可以实现 iframe 之间的数据传递、事件处理和共享资源。不论是在单页面应用中,还是在多个独立页面之间,跨 iframe 页面通信都能够为我们带来更加灵活、高效的交互和协作方式。然而,在实践中,我们也需要注意安全性和性能方面的考虑。

前端梦工厂 2076

MATLAB三元相图实战:从数据准备到高级可视化技巧全解析

本文深入解析了如何使用MATLAB绘制专业的三元相图(ternary plot)。文章从数据归一化、范围映射等预处理技巧入手,详细介绍了散点图、等高线图、凸包计算等高级可视化方法,并提供了多数据集对比与出版级图表美化的实战指南,帮助科研与工程人员高效呈现复杂的三元数据关系。

spark7igniter的博客 257

从空调温控到信号降噪:一阶RC低通滤波器在Arduino和STM32上的C语言实现指南

本文详细介绍了如何在Arduino和STM32平台上使用C语言实现一阶RC低通滤波器,涵盖从基础理论到实际应用的完整流程。通过具体代码示例和优化技巧,帮助开发者有效处理传感器噪声、信号平滑等问题,提升嵌入式系统的信号处理能力。

weixin_30565199的博客 501

iframe: 通过postMessage实现父子页面通信

在前端开发中,跨域是一个常见的问题,由于同源策略的限制,浏览器不允许在不同源的页面之间直接进行通信。解决跨域问题有多种方式,其中一种常用的方式是使用postMessage。它是HTML5引入的一种跨文档通信的机制,可以在不同的窗口或框架之间传递数据,即使这些窗口或框架不属于同一个源。本文将介绍改方法的使用与场景

qq_45796592的博客 2743

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例)

本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍

Lucas1211的博客 2万+

【iframe + postMessage】postMessage实现iframe间跨域通信

本文介绍了使用postMessage实现iframe跨域通信的解决方案。项目B通过iframe嵌入项目A,当B需要跳转新页面时,通过window.parent.postMessage向A发送消息,包含目标URL、tab标识等数据。项目A监听message事件,验证消息来源域后,根据B传递的数据触发对应的导航栏切换操作。该方法实现了父子页面间的安全跨域通信,代码示例展示了消息发送、接收和验证的具体实现过程。

karshey的博客 583

AutoSAR配置视频讲解:新建DaVinci工程

AutoSAR实验视频讲解:闪烁一颗LED实验【新建DaVinci工程】 上一篇 | 下一篇 | 总目录 实验架构图 视频本频放在了文末,下图描述了本次实验配置内容在AutoSAR架构中的位置,供大家参考 实验内容 本节课程讲解新建DaVinci工程,听上去新建工程很简单,但是还是需要很多的准备工作和细节。主要内容是新建工程和导入dbc文件和导入arxml文件的方法 主要步骤 新建DaVinci工程 导入.dbc通信矩阵文件 导入Mcal的arxml文件 实验视频2:Mcal配置 提示:版权所在,违

雪云飞星的博客 6275

使用强化学习快速让AI学会玩贪食蛇游戏(轻量级二十分钟训练+代码)

如何让AI玩会贪食蛇,甚至比你厉害概述构建问题(强化学习求解的一般步骤)环境动作定义状态定义奖励设计训练奖励值收敛图效果代码 概述 所用技术:强化学习(Deep Reinforcement Learning),属于一种无监督学习,利用奖励rewardrewardreward教会智能体AgentAgentAgent在合适的场景做合适的决策。 采用算法:试过两种算法D3QN和离散版本的PPO算法,最终采用离散版本PPO算法+GAE(PPO是我用过的性能最好的算法之一) 编程语言与深度学习框架:Python3.

ZYunfei的博客 2万+

vue页面内嵌iframe使用postMessage进行跨域通信

跨域 关于跨域的详细资料:跨域,这里只需要明确什么情况下跨域了(等同于两个url什么情况下是非同源关系)。 协议、域名、端口三者有其一不同,就算是跨域,就算是非同源 本地环境模拟 借助phpstudy创建两个非同源网站,分别为www.a.com以及www.b.com。其中www.b.com的创建过程如下。 以上创建出来的www.b.com网页就是一个vue页面,访问如下: 同理创建出www.a.com页面,访问页面如下: vue中使用iframe、postMessage跨域通信 获取ifra

foreverzwl 2981

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iframe 间的postMessage通信

iframe 间的postMessage通信需求启发如何实现postMessage参数介绍使用方式一张图总结 需求启发 在一个新开发的界面(A界面)中引入一个第三方的界面(B界面),要求点击某一按钮时,A界面可以向B界面发送特定的消息,B界面收到这个消息并且处理成功之后向A界面返回处理结果。如果两个网页不同源,就无法拿到对方的DOM。典型的例子是iframe窗口和window.open方法打开的窗口,它们与父窗口无法通信。 比如,父窗口运行下面的命令,如果iframe窗口不是同源,就会报错。 documen

qq_42052896的博客 2530

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

vue中使用iframe+postMessage进行跨项目的通信

vue中使用iframe+postMessage进行跨项目的通信 需求说明:遥远世界那头的一个暴发户,不想和我们的系统产生任何关系,又想使用我们的修改密码模块的组件(前提:他本身登录模块的数据库是我们的数据库,所以还好token能通过我们后台的验证),所以只好想到用iframe来实现了。 一、挂载iframe的页面的代码 <template> <div> <div class="content">cisdi</div>

weixin_44022194的博客 3432

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iframe之父子页面间如何用postMessage通信?

在业务上需要使用iframe嵌入页面的话,很多逻辑和样式需要通过父子页面间的通信来进行调整,本文主要从实践上介绍使用postMessage进行iframe父子页面间的通信 一、postMessage基本语法 otherWindow.postMessage(message, targetOrigin, [transfer]); otherWindow 其他窗口的一个引用,比如ifram...

Keir的博客 6242

【JS】postMessage实现iframe跨域通信

【JS】postMessage实现iframe跨域通信

owo_ovo的博客 2156

postMessage+iframe通信

postMessage window.postMessage() 方法可以安全地实现跨源通信。 语法 otherWindow.postMessage(message, targetOrigin, [transfer]); otherWindow 其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。 message 将要发送到其他 window的数据。它将会被结构化克隆算法序列化。这意味着你可以

wangweiscsdn的博客 714

使用 iframe + postMessage 实现跨域通信

在实际项目开发中可能会碰到在 a.com 页面中嵌套 b.com 页面,这时第一反应是使用 iframe,但是产品又提出在 a.com 中操作,b.com 中进行显示,或者相反。 1、postMessage  postMessage方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。语法: otherWindow.postMessage(m

糖衣 8万+

VUE中iframe结合window.postMessage实现跨域通信

什么是iframe? iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。 什么是postMessage? window.postMessage()方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数Document.domain设置为相同的值...

Oralinge 1万+

anuglar中获取iframe对象, 用iframe进行postMessage通信

然后在 showIframe() 方法中,当按钮被点击时,显示 iframe,并监听 iframe 的 onload 事件。在 postMessageToIframe() 方法中,我们获取 iframe 的 contentWindow,并使用 postMessage 方法向 iframe 发送消息。在这个示例中,当点击按钮显示 iframe 后,ngIf 会根据条件渲染 iframe,同时会触发 iframe 的 load 事件,调用。方式三, 获取iframe对象。

zwjapple的专栏 869

在 Vue 中封装iframe 组件进行 postMessage 通信

在这个示例中,我们通过引用和使用 PostMessageIframe 组件来发送和接收 postMessage。在按钮的点击事件处理函数 sendPostMessage 中,我们通过 $refs 获取到 PostMessageIframe 组件的实例,并调用其 sendMessage 方法向 iframe 发送消息。当 iframe 载入完成时,通过监听 message 事件来接收从 iframe 发送过来的消息,并在 handleMessage 方法中进行相应的处理。

weixin_60901596的博客 993
上一篇: 报错:Error: @vitejs/plugin-vue requires vue (>=3.2.13) or @vue/compiler-sfc to be present in the depen
下一篇: 重学ES6之一
菊の物语
博客等级 码龄10年 322粉丝 84原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值