自学内容网 自学内容网

Iframe窗口通信

在组件中使用Iframe,只需要传入src即可。

<iframe id="myIframe" style={{ width: '100%', height: '100%', border: 'none' }} src={src} />

想要与Iframe通信,需要监听message来接收消息。

window.addEventListener('message', receiveMessage);

父页面和子Iframe都是一样的接收方法

  // 接收
  const receiveMessage = (event: any) => {
    // 判断来源,过滤别的窗口发送的消息,event是发送时定义的数据
    if (event.origin === baseUrl) {
      let params: any = event.data || '{}';
      console.log('receiveMessage Successful', params);
    }
  };

发送时,父页面发送给子Iframe

  // 发送
  const postMessage = (key: string, data: object) => {
    const myIframe = document.getElementById('myIframe') as HTMLIFrameElement;
    if (!myIframe) return;
    //使用的是contentWindow
    const childWindow = myIframe?.contentWindow;
    //自定义发送的数据格式
    const dataJson = {
      message: {  data, },
    };
    //子Iframe的地址
    let targetUrl = baseUrl;
   //使用的是childWindow
    childWindow?.postMessage(JSON.stringify(dataJson), targetUrl);
    console.log('sendMessage Successful');
  };

子Iframe发送给父页面

export const postMessage = (key, data) => {
  const dataJson = {
    message: {  data,},
  };
  let targetUrl = myTargetUrl
  //使用window.parent
   window.parent?.postMessage(JSON.stringify(dataJson), targetUrl);
   console.log('sendMessage Successful');
}

原文地址:https://blog.csdn.net/weixin_46361785/article/details/142496951

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!