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

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

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

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


【子页面】

// 子组件 (假设这是在iframe中的Vue应用)
new Vue({
  el: '#app',
  methods: {
    sendMessageToParent(url) {
      // 向父页面发送消息,包括目标URL
      window.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.kler.cn/a/442516.html

相关文章:

  • flutter R库对图片资源进行自动管理
  • salesforce url button如何引用lightning component
  • 计算机视觉与深度学习:使用深度学习训练基于视觉的车辆检测器(MATLAB源码-Faster R-CNN)
  • Java中的并发工具类:让多线程编程更轻松
  • 【MySQL学习笔记】MySQL视图View
  • Wireshark抓包教程(2024最新版个人笔记)
  • 基于Streamlit和OpenAI大模型的Chatbot App支持图片的多模态输入
  • 使用 Copilot 增强创造力:Mighty Media 的卓越数字化之旅
  • 【论文复刻】2021-2012年环境规制影响企业融资约束吗—基于新《环保法》的准自然实验(C刊《证券市场导报》)
  • RPA 在促销活动自动化处理中的创新应用
  • CSS3:重塑网页设计的新力量
  • YOLO目标检测算法
  • 【DevOps工具篇】Gitlab Runner设置(使用Docker in docker作为Runner)
  • LAPACK 程序 SSYEVD 的计算特征值的应用实例 C/Fortran
  • 数据结构 ——哈希表
  • React工具和库面试题目(二)
  • 2024.12.15 TCP/IP 网络模型有哪几层?(二)
  • C++ 的衰退复制(decay-copy)
  • 画一颗随机数
  • Firefox 基本设置备忘
  • cursor的composer功能
  • Mac/Linux 快速部署TiDB
  • Uniapp图片跨域解决
  • Python Tkinter 弹窗美化指南
  • 不坑盒子2024.1218更新了,模板库上线、一键添加拼音、一键翻译……支持Word、Excel、PPT、WPS
  • Vite 系列课程|1课程道路,2什么是构建工具