当前位置: 首页 > 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对象了,不影响使用的

相关文章:

  • Linux 部署 RocketMQ
  • oracle数据库查看当前session会话数、查询最大支持连接数、修改最大支持连接数
  • 服务器并发实现的五种方法
  • MCP Server Resource 开发学习文档
  • WebGL基本概念
  • CUDA 加速的基础线性代数库cuBLAS
  • CC53.【C++ Cont】一维前缀和
  • AI编程: OpenAI Codex vs Google Jules vs GitHub Copilot++
  • Java转Go日记(五十四):gin路由
  • 【笔记】修复AttributeError: ‘super‘ object has no attribute ‘__del__‘
  • Qwen3技术报告笔记
  • NLP学习路线图(四):Python编程语言
  • # 深入解析BERT自然语言处理框架:原理、结构与应用
  • 基于 ZU49DR FPGA 的无线电射频数据采样转换开发平台核心板
  • Java 大视界 -- 基于 Java 的大数据分布式存储在视频会议系统海量视频数据存储与回放中的应用(263)
  • 基于SpringBoot的美食分享平台设计与开发(Vue MySQL)
  • macOS专业用户远程操作全场景优化指南:开发运维协同、安全合规与性能提升实战
  • Spring Cloud Gateway高并发限流——基于Redis实现方案解析
  • 梳理Spring Boot中三种异常处理
  • 消费类,小家电产品如何做Type-C PD快充快速充电
  • 上海嘉定区网站建设/如何获取热搜关键词
  • 专业网站设计方案公司/网络网站推广
  • 做程序开发的网站/第三方网站流量统计
  • 微信公众平台人工电话/网站播放视频速度优化
  • 代理推广怎么做/搜索引擎排名优化seo课后题
  • 临沧市住房和城乡建设局门户网站/百度网站收录提交入口