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;
});
相关推荐
Sheldon一蓑烟雨任平生3 小时前
Vue3 生命周期
vue3·生命周期·1024程序员节·setup·vue3 生命周期·vue2 生命周期
一只小阿乐1 天前
vue3 中实现父子组件v-model双向绑定 总结
前端·javascript·vue.js·vue3·组件·v-model语法糖
IT教程资源C2 天前
(N_157)基于springboot,vue服装商城系统
mysql·vue3·前后端分离·springboot服装商城
Sheldon一蓑烟雨任平生2 天前
Vue3 组件 v-model
vue.js·vue3·v-model·definemodel·v-model修饰符·自定义双向绑定组件·多个v-model绑定
嗷呜~2 天前
error 找不到模块“../views/Login.vue”或其相应的类型声明
typescript·vue3
加蓓努力我先飞2 天前
Vue3小兔鲜-(二)
前端·javascript·css·vue3
一只小阿乐3 天前
做一个vue3 v-model 双向绑定的弹窗
javascript·vue.js·elementui·vue3·v-model
IT教程资源C3 天前
(N_156)基于springboot,vue小区物业管理系统
mysql·vue3·前后端分离·springboot小区物业
Sheldon一蓑烟雨任平生8 天前
Vue3 表单输入绑定
vue.js·vue3·v-model·vue3 表单输入绑定·表单输入绑定·input和change区别·vue3 双向数据绑定
麦麦大数据8 天前
D026 vue3+django 论文知识图谱推荐可视化系统 | vue3+vite前端|neo4j 图数据库
前端·django·vue3·知识图谱·推荐算法·论文文献·科研图谱