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

vue iframe进行父子页面通信并切换URL

使用通义千问提问后得到一个很好的示例。

需求是2个项目需要使用同一个面包屑进行跳转,其中一个是iframe所在的项目,另一个需要通过地址访问。通过 window.parent.postMessage ,帮助 <iframe> 内嵌入的子页面和其父页面之间进行跨域通信。


【子页面】

// 子组件 (假设这是在iframe中的Vue应用)
new Vue({el: '#app',methods: {sendMessageToParent(url) {// 向父页面发送消息,包括目标URLwindow.parent.postMessage({ action: 'changeIframeSrc', url }, '*');}},template: `<button @click="sendMessageToParent('https://example.com/new-content')">Load New Content</button>`
});

【父页面】

<!-- 父页面 HTML -->
<div id="app"><iframe ref="myIframe" :src="currentUrl" width="600" height="400"></iframe>
</div>
// 父页面 Vue 实例
new Vue({el: '#app',data() {return {currentUrl: 'https://example.com/initial-content' // 初始URL};},mounted() {// 监听来自子组件的消息window.addEventListener('message', this.handleMessage);},beforeDestroy() {// 移除事件监听器以防止内存泄漏window.removeEventListener('message', this.handleMessage);},methods: {handleMessage(event) {const { data } = event;// 安全检查:验证消息来源和预期动作if (data.action === 'changeIframeSrc' && typeof data.url === 'string') {// 更新 iframe 的 src 属性this.currentUrl = data.url;}}}
});

请注意,在实际应用中,你不应该使用 '*' 作为 postMessage 的目标源参数,因为它允许消息被发送到任何域,这可能会导致安全问题。你应该指定一个明确的源,如 'https://your-iframe-domain.com',以便只接受来自特定域的消息。同样地,在父页面接收消息时,你也应该检查 event.origin 来确保消息确实来自预期的域。

【资料参考】

通义tongyi.ai_你的全能AI助手-通义千问

http://www.lryc.cn/news/506133.html

相关文章:

  • 基于Spring Boot的摄影师分享交流社区
  • Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
  • Linux(网络协议和管理)
  • C++ 入门第 20 天:STL 容器之无序集合与无序多重集合
  • devops-部署Harbor实现私有Docker镜像仓库
  • rebase ‘A‘ onto ‘master‘ 和 merge ‘master‘ into ‘A‘有什么区别
  • Vulhub:Jackson[漏洞复现]
  • strongswan构建测试环境
  • 前端:金额高精度处理
  • 面试题整理3----nc命令的常见用法
  • Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】
  • IntelliJ IDEA 使用技巧与插件推荐
  • Oracle 技术精选学习
  • sqlilabs第三十关到第三十五关靶场攻略
  • windows免登录linux
  • matlab绘图时设置左、右坐标轴为不同颜色
  • springboot+javafx使用aop切面导致的fx:id不能被注入问题
  • 说说你对java lambda表达式的理解?
  • 优化你的 3D Tiles:性能与质量的平衡
  • 【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
  • 设计模式之桥接模式:抽象与实现之间的分离艺术
  • 网络隧道与代理
  • 游戏关卡分析:荒野大镖客2雪山终战
  • Java 中的 LocalDateTime、DateTime 和 Date 的区别解析
  • MATLAB引用矩阵元素的几种方法
  • Linux、File System、Linux基本常用命令
  • 大数据治理:开启数据价值挖掘之旅
  • Linux排查cpu运行负载过高
  • Cobalt Strike 4.8 用户指南-第十四节 Aggressor 脚本
  • C++并发与多线程(高级函数async)