vue之组件和iframe页面的相互传参问题

 更新时间:2025年06月12日 09:08:56   作者:阿飞920  
这篇文章主要介绍了vue之组件和iframe页面的相互传参问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

目前网上大多关于iframe父子传参的博客都是在叙述父页面是html文件,子iframe文件也是html文件,涉及到父页面是vue组件子iframe页面是html的博客多数讲的不是很明白;而最近我在项目中碰到了这种需求:在vue组件中嵌入iframe页面,并实现父子传参;

1.vue组件调用iframe页面方法和参数

(1-1)下面是在 vue组件中(父组件) 一个通过点击按钮触发的方法:

 sentToIframe() {
      let childFrameObj = document.getElementById("unityiframe");
      console.log("childFrameObj", childFrameObj);
      // childFrameObj.contentWindow.getMessageFromParent(this.tData); //第一种向子iFrame传参方式,调用iframe的methods达到传参的目的
      this.$refs.unity.contentWindow.getMessageFromParent(this.tData); // 这样也是可以调用子iframe的方法
      // childFrameObj.contentWindow.frameData = "这是vue组件给你的参数!" // 传参成功
      this.$refs.unity.contentWindow.frameData =
        "这是vue组件给你的第二个参数!"; //传参成功
      console.log("发送完成");

      //此外,还可以通过DOM操作,操作子iframe的DOM
      var t = document
        .getElementById("unityiframe")
        .contentWindow.document.getElementById("dd");
      console.log(t);
      //
      console.log("frameData?", unityiframe.window.frameData); //利用id可以调用到iframe里的变量
      // console.log("frameData?",this.$refs.unity.window.frameData) //利用ref调用不到iframe里的变量
    },

(1-2)子组件 iframe页面 中有一个被调用的方法及变量:

  var frameData = "别喊我!" //此变量用于测试 vue组件是否能调用此变量
  function getMessageFromParent(value){
    // 接受从vue组件中传过来的参数
    console.log(`我接收到parent传过来的参数了:${value}`)
  }
  

点击按钮的结果是:

2.iframe页面向vue组件传参

(2-1)在vue组件中有一个供iframe页面调用的方法:

    getFromIframe(value) {
      console.log(`我是iframe传过来的参数:${value}`);
      console.log("我被iframe调用了!");
      console.log(this.vueData);
      console.log(`改变前是:你是否能够改变我;改变后是:${this.isChangeMe}`);
    }

(2-2)iframe调用vue组件方法的代码

  function Obj(res){
  // Obj通过按钮点击触发
    console.log(parent)
        // 调用vue组件方法
      parent.getFromIframe("我叫iframe")
      // 向vue组件发送参数 && 改变vue组件的参数
      parent.isChangeMe = "你已经被我iframe改变了"
  }

但是 !!!!!!!!!!!!!!!

只这么做是不够的,会报错,如下:

个人猜想: 问题的原因是 iframe的parent并不是vue实例!

目前只找到了一个办法来解决这个问题:

就是在created钩子里加上这两句,

created() {
    window.getFromIframe = this.getFromIframe; //把vue实例中的方法引用给window对象
  },

在调用的vue实例的方法中 加上对vue内变量的改变

getFromIframe(value) {
      console.log(`我是iframe传过来的参数:${value}`);
      console.log("我被iframe调用了!");
      console.log(this.vueData);
      this.isChangeMe = window.isChangeMe;// 把window变量 赋值给 vue 实例变量;使得在iframe中能够改变vue实例中变量
      console.log(`改变前是:你是否能够改变我;改变后是:${this.isChangeMe}`);
    }

最终的运行结果是:

bingo!!!!! 问题暂时得到了解决。

总结

vue组件 和 iframe 的嵌入麻烦多多,且目前还没还没找到正统的方法;此外,还有很多坑我还没踩到,如果后续这方面有什么问题 以及 其他的解决方案,我会继续更新到这上面来的!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue2.x和Vue3.x的双向绑定原理详解

    Vue2.x和Vue3.x的双向绑定原理详解

    这篇文章主要给大家介绍了关于Vue2.x和Vue3.x的双向绑定原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • vue获取el-form的整体验证状态

    vue获取el-form的整体验证状态

    本文主要介绍了vue获取el-form的整体验证状态,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • vue数组中不满足条件跳出循环问题

    vue数组中不满足条件跳出循环问题

    这篇文章主要介绍了vue数组中不满足条件跳出循环问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • vue3中template使用ref无需.value原因解析

    vue3中template使用ref无需.value原因解析

    vue3的template中使用ref变量无需使用.value,还可以在事件处理器中进行赋值操作时,无需使用.value就可以直接修改ref变量的值,这篇文章主要介绍了原来vue3中template使用ref无需.value是因为这个,需要的朋友可以参考下
    2024-06-06
  • 使用vue2实现带地区编号和名称的省市县三级联动效果

    使用vue2实现带地区编号和名称的省市县三级联动效果

    我们知道省市区县都有名称和对应的数字唯一编号,使用编号可以更方便查询以及程序处理,我们今天来了解一下使用vue2来实现常见的省市区下拉联动选择效果,需要的朋友可以参考下
    2018-11-11
  • 深入了解Vue3模板编译原理

    深入了解Vue3模板编译原理

    这篇文章主要介绍了深入了解Vue3模板编译原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • vue中如何下载excel流文件及设置下载文件名

    vue中如何下载excel流文件及设置下载文件名

    这篇文章主要介绍了vue中如何下载excel流文件及设置下载文件名,对vue感兴趣的同学,可以参考下
    2021-05-05
  • vue使用 better-scroll的参数和方法详解

    vue使用 better-scroll的参数和方法详解

    这篇文章主要介绍了vue使用 better-scroll的参数和方法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • vue柱状进度条图像的完美实现方案

    vue柱状进度条图像的完美实现方案

    本文是对bar进度条实现的2种方案进行分享,第一种是很简单,纯css的实现,第二种是echart的实现。对vue柱状进度条图像的实现方案,感兴趣的朋友跟随小编一起看看吧
    2019-08-08
  • Vue3中el-table表格数据不显示的原因和解决方法

    Vue3中el-table表格数据不显示的原因和解决方法

    这篇文章主要给大家介绍了Vue3中el-table表格数据不显示的原因和解决方法,文中有详细的代码示例供大家参考,如果有遇到相同问题的朋友可以参考阅读本文,希望能够帮到您
    2023-11-11

最新评论