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

父 => 子

父项目

javascript 复制代码
 <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要传递的数据")),
        },
      },
      "*"
    );
  }
};

子项目

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

子 => 父

子项目

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

父项目

javascript 复制代码
 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相关的警告信息

javascript 复制代码
window.addEventListener('message', event => {
  // 确保消息来源可信
  // 例如可以检查消息的来源是否是你所期望的主框架的URL
  // 然后再处理接收到的数据
  if (event.origin !== 'http://expected-source.com') {
    return; // 消息来源不是你所期望的,忽略
  }
  
  // 处理收到的数据
  const receivedData = event.data;
});
相关推荐
陪我一起学编程3 天前
vue3笔记
前端·webpack·vue3·vite·脚手架·vue3笔记·组件式
Json____6 天前
家居装修 AI 智能咨询助手:让装修咨询从“大海捞针“变成“一问即答“
java·后端·vue3·it学习·wwwoop.com
liangshanbo12157 天前
面试题:什么是 Reflect?它解决了什么问题?
vue3·reflect
RuoyiOffice7 天前
SpringBoot3+Vue3 低代码业务表单:从拖拽设计、独立建表到审批与数据查询
spring boot·vue3·数据建模·flowable·版本管理·低代码表单·ruoyi office
RuoyiOffice7 天前
SpringBoot3 企业薪酬核算:考勤、绩效与薪资规则如何算出一张可解释的工资单
spring boot·vue3·规则引擎·hrm·ruoyi office·薪酬核算·薪资试算
RuoyiOffice13 天前
2026最推荐基于SpringBoot+Vue3的项目管理经营一体化:从商机、合同、任务与工时走到回款和利润
spring boot·项目管理·vue3·crm·合同管理·ruoyi office·项目经营
RuoyiOffice14 天前
SpringBoot+Vue3 节日主题换肤实战:一条参数换全站配色,节后自动还原
spring boot·vue3·spring boot 3·vben admin·ruoyi office·节日主题·换肤方案
RuoyiOffice16 天前
SpringBoot3+Vue3 流程抄送已读:打开详情消红点,待办与知会怎么分开
spring boot·vue3·flowable·spring boot 3·ruoyi office·流程抄送·已读回执
志尊宝17 天前
Vue3 零基础每日笔记(038):亲手封装 useDebounceFn 与 useThrottleFn——高频事件的流量阀
前端·javascript·vue·html·vue3
志尊宝17 天前
Vue3 零基础每日笔记(043):defineModel 与 defineExpose 的 TS 用法——3.4+ 新 API 进阶
前端·javascript·vue·html·vue3