iframe通信,window.postMessage父子项目数据通信

父 => 子

父项目

 <iframe
      :src="cockpitUrl"
      id="cockpitIframe"
      @load="handleLoad" 
	></iframe>

// 向子系统传递数据(注意要再iframe的load中注册,保证iframe已经加载完成,这样子项目才能监听到)
const handleLoad = () => {
   
  const iframe: any = document.getElementById("cockpitIframe");
  if (iframe.contentWindow) {
   
    iframe.contentWindow.postMessage(
      {
   
        type: "on-cockpit",
        data: {
   
          userInfo: JSON.parse(JSON.stringify("obj要传递的数据")),
        },
      },
      "*"
    );
  }
};

子项目

  window.addEventListener("message", (event) => {
   
    const data = event.data;
    if (data.type) {
   
        case "on-cockpit":
        //这里就可以拿到父项目传递的数据
        break;
      }
    }
  });

子 => 父

子项目

 window.parent.postMessage(
    {
   
      type: "skip-cockpit",
      payload: JSON.parse(JSON.stringify("要传递给父项目的数据")),
    },
    "*"
  );

父项目

 window.addEventListener("message", (event) => {
   
    const data = event.data;
    if (data.type) {
   
      switch (data.type) {
   
        case "skip-cockpit":
          //这里就可以拿到子项目传递过来的数据
          break;
      }
    }
  });

如果你在子项目中使用 window.addEventListener(‘message’, …) 来监听消息,但收到的 event.data 类型是 “webpackWarnings”,这可能是因为你的监听器在Webpack开发服务器的环境下也会接收到一些Webpack相关的警告信息

window.addEventListener('message', event => {
   
  // 确保消息来源可信
  // 例如可以检查消息的来源是否是你所期望的主框架的URL
  // 然后再处理接收到的数据
  if (event.origin !== 'http://expected-source.com') {
   
    return; // 消息来源不是你所期望的,忽略
  }
  
  // 处理收到的数据
  const receivedData = event.data;
});

相关推荐

  1. iframe通信,window.postMessage父子项目数据通信

    2024-02-05 13:00:03       55 阅读
  2. uniapp父子组件通信

    2024-02-05 13:00:03       53 阅读
  3. Vue3父子组件通信

    2024-02-05 13:00:03       63 阅读
  4. vue3+ts父子通信

    2024-02-05 13:00:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 13:00:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 13:00:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 13:00:03       82 阅读
  4. Python语言-面向对象

    2024-02-05 13:00:03       91 阅读

热门阅读

  1. NLP自然语言处理

    2024-02-05 13:00:03       53 阅读
  2. c++获取逻辑执行的毫秒数

    2024-02-05 13:00:03       59 阅读
  3. k8s 部署 nocas 同时部署mysql

    2024-02-05 13:00:03       46 阅读
  4. MySQL深入——17(主备延迟)

    2024-02-05 13:00:03       54 阅读
  5. 软件设计师-23年上半年-上午答案

    2024-02-05 13:00:03       44 阅读
  6. Python列表初步

    2024-02-05 13:00:03       55 阅读