当前位置: 首页 > news >正文

qiankun 微前端主应用使用 iframe 加载子应用中的某个页面

背景:前端项目采用 qiankun 框架开发,主应用使用 vue2 ,子应用使用 react16+umi。项目部署时使用 nginx, 部署在同一台服务器上,主项目部署在一级目录,子项目部署在二级目录。其中主应用的有一个需求是,将各个子系统的日志功能集中到主应用统一管理。而针对于某一个子应用,有一个特殊处理的功能,根据主应用中的日志记录,可以查看子应用中的业务流转记录。基于这种场景,使用到了 iframe 加载子应用。

遇到的问题:

一、本地开发时,主应用使用 iframe 无法加载子应用页面。

解决方案一:部署到服务器上。

二、部署到服务器时,nginx 缺少配置导致无法加载同源页面。

报错信息:

“Refused to display 'http://localhost:8088/' in a frame because it set 'X-Frame-Options' to 'deny'” 

修改配置:

location / {add_header X-Frame-Options SAMEORIGIN;
}

三、主应用中加载的子应用页面,包含了主应用的公共导航、菜单、底部结构。

加载 iframe 页面后的通信:

主应用:

export default {mounted(){window.addEventListener('message',this.handleMessage);},beforeDestory(){window.addEventListener('message',this.handleMessage);},methods:{handleMessage(event){const {action,status} = event.data;if(action == 'subappRendered' && status == 'success'){const iframeDom = document.querySelector('#iframe').contentDocument;const openSidebarDom = iframeDom.querySelector('.el-header');const elHeaderDom = iframeDom.querySelector('el-footer');elHeaderDom && openSidebarDom.removeChild(elHeaderDom);elFooterDom && openSiderbardom.removeChild(elFooterDom);const elContainerDom = iframeDom.querySelector('.el-container');const elAsideDom = iframeDom.querySelector('.el-aside');elAsideDom && elContainerDom.removeChild(elAsideDom);const footerDom = iframeDom = iframeDom.querySelector('.footerClass');footerDom.style.display = 'none';}},}}

 子应用:

export default {mounted (){window.parent.postMessage({action: 'subappRendered',status: 'success'},'*');}
}

 

相关文章:

  • 解决 Maven 500 错误:无法传输 maven-metadata.xml 文件
  • 汽配快车道解决chrome backgroud.js(Service Worker) XMLHttpRequest is not defined问题
  • conda 创建、激活、退出、删除环境命令
  • 【HD-RK3576-PI】定制用户升级固件
  • Fab-ME: 基于视觉状态空间与注意力增强的织物缺陷检测框架详解
  • arcgis几何与游标(2)
  • Qt中widget控件的常见属性
  • FPGA-DDS技术的波形发生器
  • 12【模块学习】DS18B20(二):高级使用
  • Nature图形复现—Origin绘制顶刊水准的多组柱状图
  • MySQL数据库精研之旅第六期:玩转数据库约束
  • web自动化:6种窗口截图方法、文件打开形式、文件路径及时间戳命名
  • 面试题:Eureka和Nocas的区别
  • 【未解决】Spring AI 1.0.0-M6 使用 Tool Calling 报错,请求破解之法
  • 关于汽车辅助驾驶不同等级、技术对比、传感器差异及未来发展方向的详细分析
  • Java Spring Cloud框架使用及常见问题
  • 超融合监控 | SmartX监控解析
  • 中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)
  • FP3:机器人操作的3D基础策略
  • 常见的 API 设计风格
  • 线下无理由退货怎样操作?线上线下监管有何不同?市场监管总局回应
  • 躺着玩手机真有意思,我“瞎”之前最喜欢了
  • 100%关税!特朗普要让美国电影100%美国制造
  • 今天全国铁路、公路进入返程高峰,这些路段时段通行压力大
  • 国际观察|韩国在政局多重不确定性中迎接总统选举
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国