Iframe父页面子页面通信

简介: Iframe父页面子页面通信

iframe子页面与父页面通信方案,下面主要介绍父页面与子页面通信方案,根据自己需求做调整,通信方法都类似,以下是案例请参考

一:父页面(调用iframe的页面)父页面中引入iframe

第一步:页面中引入iframe

<iframe
          id="PanIframe"
          ref={iframeRef}
          frameBorder={0}
          width={960}
          height={600}
          marginHeight={0}
          scrolling="no"
          src={yunPanUrls}
></iframe>

第二步:父页面中监听iframe中发送过来的消息

    window.addEventListener('message', receiveMessageIframePage, false);

    第三步:监听到消息之后处理自身的业务逻辑或者与iframe页面通信都可

    getBoundFileKeys:是iframe页面内部暴露出来的方法,我们在父页面监听这个方法iframes.contentWindow.postMessage: 是发送给iframe的方法,方法名boundFileKeys
    const receiveMessageIframePage = (event) => {
            let iframes = document.getElementById('PanIframe'); // 获取iframe元素
            // 如果监听到iframe暴露出一个type是getBoundFileKeys的消息,初始化给iframe发送一个boundFileKeys消息,做初始化的操作
            if (event.data.type === 'getBoundFileKeys') {
                    iframes.contentWindow.postMessage({ type: 'boundFileKeys', data: "消息内容体" }, '*');
            }
            if (event.data.type === 'check') {
                // 监听iframe暴露出来的check方法
            }
    }

    二:子页面(iframe页面)

    发送消息给父页面获取初始化信息数据或其他业务

    window.parent.postMessage({
            type: 'getBoundFileKeys'
    }, '*');
    

    监听父页面发送过来的消息

    window.addEventListener('message', onMessage, false); // 接收接入方页面发送的消息
    const onMessage = (e) => {
        if (!e || !e.data) { return; }
        switch (e.data.type) {
             case 'boundFileKeys':
                   // TODO 处理自己的业务
                   break;
         }
     };

    发送消息给接入方页面

    isInIframe && window.parent.postMessage({
       type: 'check', //自定义名称
       data: ["自定义需要发送的数据"] // 处理数据
    }, '*');

    优化:判断是否处于iframe中

    getIsInIframe() {
        return window.self !== window.top;
    }

    总结:使用到的就是下面这几个方法

    父页面监听iframe消息:
    window.addEventListener('message', receiveMessageIframePage, false);
    父页面发送给iframe页面的消息:
    iframes.contentWindow.postMessage({ type: 'boundFileKeys', data: "消息内容体" }, '*');
    iframe页面监听父页面发过来的消息:
    window.addEventListener('message', onMessage, false); 
    iframe页面给父页面发送消息:
    window.parent.postMessage({ type: 'check',  data: ["自定义需要发送的数据"] }, '*');
    

     



    相关文章
    |
    传感器
    差动放大器的介绍
    一、差动放大器的原理 差动放大器是通过两个输入信号的差值来放大信号的一种电路。它由两个输入端口和一个输出端口组成,输入端口分别连接两个输入信号,输出端口连接放大后的信号。差动放大器的原理基于差动放大模式,即将两个输入信号分别连接到两个晶体管的基极端口,通过晶体管的放大作用将差值放大后输出。 差动放大器的工作原理是利用两个晶体管的共射放大作用,通过对输入信号进行差分放大,将差值放大后输出。其中一个晶体管的基极连接到输入信号,另一个晶体管的基极连接到输入信号的反相信号。通过对两个晶体管的控制,可以实现对输入信号的放大和输出。 二、差动放大器的工作方式 差动放大器的工作方式主要包括共模模式和差模
    852 0
    |
    算法 计算机视觉
    yolov5 deepsort-船舶目标检测+目标跟踪+单目测距+速度测量(代码+教程)
    yolov5 deepsort-船舶目标检测+目标跟踪+单目测距+速度测量(代码+教程)
    |
    11月前
    |
    设计模式 Java uml
    课时107:时序图
    课时107介绍了时序图的描述与设计。时序图用于展示代码执行流程,如Java程序中接口IMessage、类MessageImpl及Factory的调用顺序。通过Power Designer创建UML Sequence Diagram,定义类操作结构并绘制消息传递路径,清晰呈现工厂模式下对象实例化和方法调用的过程。时序图帮助理解程序逻辑,适用于项目开发中的流程分析与文档记录。
    469 1
    |
    边缘计算 搜索推荐 物联网
    实时数据处理:流计算的兴起
    【6月更文挑战第15天】**流计算兴起应对实时数据挑战:** 流计算是数字化时代实时数据处理的关键,它提供低延迟分析,确保数据产生时即进行处理。这种技术强调数据流的连续性,采用分布式架构实现高效、弹性且容错的数据处理。应用场景包括物联网分析、金融交易、日志监控及实时推荐系统。未来,流计算将融合AI、边缘计算,支持多源数据,并加强安全性,成为大数据处理的重要趋势。
    |
    存储
    uniapp实战 -- 个人信息维护(含选择图片 uni.chooseMedia,上传文件 uni.uploadFile,获取和更新表单数据)
    uniapp实战 -- 个人信息维护(含选择图片 uni.chooseMedia,上传文件 uni.uploadFile,获取和更新表单数据)
    590 2
    |
    资源调度 安全 数据处理
    实时计算 Flink版产品使用问题之提交任务时如何设置TaskManager的数量
    实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
    腾讯地图的(地图选点|输入模糊匹配)
    腾讯地图的(地图选点|输入模糊匹配)
    |
    人工智能 监控 前端开发
    前端架构(含演进历程、设计内容、AI辅助设计、架构演进历程)
    前端架构(含演进历程、设计内容、AI辅助设计、架构演进历程)
    590 0
    |
    Java Android开发 开发者
    【Uniapp开发】APP的真机调试指南,从开发到上架全过程
    【Uniapp开发】APP的真机调试指南,从开发到上架全过程
    882 3