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: ["自定义需要发送的数据"] }, '*');
    

     



    相关文章
    |
    2月前
    |
    JavaScript 前端开发 API
    快速实现 iframe 嵌套页面
    【6月更文挑战第22天】快速实现 iframe 嵌套页面
    |
    9月前
    |
    JavaScript
    iframe子页面获取父页面元素,或父页面获取iframe子页面的元素
    iframe子页面获取父页面元素,或父页面获取iframe子页面的元素
    |
    9月前
    |
    JavaScript 定位技术
    vue父页面给iframe子页面传值
    vue父页面给iframe子页面传值
    86 0
    |
    9月前
    |
    JavaScript
    vue使用iframe 子页面调用父页面的方法
    vue使用iframe 子页面调用父页面的方法
    118 0
    |
    9月前
    layer 弹出框(iframe层)父子页面传值
    layer 弹出框(iframe层)父子页面传值
    |
    JavaScript
    简单vue父子iframe页面之间跨域通信传值postMessage()
    简单vue父子iframe页面之间跨域通信传值postMessage()
    903 0
    layer 子页面调用父页面
    layer 子页面调用父页面
    131 0