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

vue组件渲染到iframe里面(同域名下),组件可以在同一项目下维护

思路

  1. 通过iframe的load事件确保DOM就绪后操作
  2. 动态写入完整的HTML文档结构
  3. 在iframe内部创建独立的Vue实例
  4. 使用render函数动态渲染传入的组件

ParentComponent.vue

<template><div><iframe-renderer :component="embeddedComponent" :propsData="{ message: 'Hello from parent' }"/></div>
</template><script>
import IframeRenderer from './IframeRenderer.vue'
import EmbeddedComponent from './EmbeddedComponent.vue'export default {components: {IframeRenderer,embeddedComponent: EmbeddedComponent}
}
</script>

IframeRenderer.vue


<template><div><iframe ref="iframe" @load="onIframeLoad"></iframe></div>
</template><script>
export default {props: {component: {type: Object,required: true},propsData: {type: Object,default: () => ({})}},methods: {onIframeLoad() {const iframeDoc = this.$refs.iframe.contentDocument// 创建基础HTML结构iframeDoc.open()iframeDoc.write(`<!DOCTYPE html><html><head><title>Embedded Vue Component</title><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"></head><body><div id="app"></div><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"><\/script><script src="https://unpkg.com/element-ui/lib/index.js"><\/script></body></html>`)iframeDoc.close()// 在iframe中初始化Vue实例,const iframeWindow = this.$refs.iframe.contentWindownew iframeWindow.Vue({el: iframeDoc.getElementById('app'),render: h => h(this.component, { props: this.propsData })})}}
}
</script>

注意事项

  • 需要处理跨域限制(建议同源部署)
  • 样式和需单独注入或使用CDN引入
  • 组件通信推荐使用postMessage API,不一定耶可以直接调用window下面的函数来实现单向通讯
  • 适用于需要沙箱隔离的场景

优点

1.不需要开启单独服务维护iframe里面的html

2.完美支持display:fixed布局问题

疑问?

传过来的不是vue模板吗,怎么可以直接用?

其实打包后传过来就是一个普通js对象了,不影响使用的

http://www.xdnf.cn/news/594379.html

相关文章:

  • VPC的作用
  • python调wfdb库读欧洲st-t数据库
  • 让办公更聪明:OA系统如何重塑企业协作模式
  • 第六部分:第五节 - 数据持久化 (基础):管理厨房的原材料库存
  • NACOS2.3.0开启鉴权登录
  • 基于深度学习的无线电调制识别系统
  • 数据库基础面试题(回答思路和面试建议)
  • 小林八股Java集合笔记(8k字概要版)
  • 【调优】Java 调优学习笔记之字符串
  • ollama接口数据返回格式化数据,商品标题,商品详情
  • 八、Linux进程和计划任务管理
  • 【Dify学习笔记】:dify通过ollama加载DeepSeek-R1-32B模型无法加载!终于解决了!!
  • C++ QT生成GIF,处理原始图像RGBA数据,窗口生成简单的动画
  • 练习小项目7:天气状态切换器
  • db_ha执行ha_isready报错authentication method 13 not supported
  • 同步/异步电路;同步/异步复位
  • 从法律视角看湖北理元理律师事务所的债务优化实践
  • Qt5、C++11 获取wifi列表与wifi连接
  • vue3商城类源码分享 期末作业 注册登录,状态管理,搜索,购物车订单页面
  • v3.0 YOLO篇-如何通过YOLO进行实验
  • Redis 中的缓存击穿、缓存穿透和缓存雪崩是什么?
  • 比较连续型自变量和从连续型变量转换成了三分类变量的因变量的关系
  • Gitee PPM:智能化项目管理如何重塑软件工厂的未来格局
  • Scaled Dot-Product Attention 中的缩放操作
  • Spring Cloud生态与技术选型指南:如何构建高可用的微服务系统?
  • C语言:gcc 或 g++ 数组边界检查方法
  • 山东大学软件学院创新项目实训开发日志——第十二周
  • 2021~2025:特斯拉人形机器人Optimus发展进程详解
  • UV-python环境管理工具 入门教程
  • 时源芯微|电源、地线的处理