【Vue】Vue父页面与iframe内嵌html子页面互调,传参问题

本文介绍了在Vue项目中如何实现与内嵌iframe HTML页面之间的互调方法。通过将HTML页面的方法绑定到window对象,Vue可以调用iframe中的函数;反之,iframe可以通过window.parent调用Vue页面上的方法,实现双向通信。这一过程对于构建复杂应用,如游戏或嵌入式内容展示等,具有实用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个开发过程中遇到的问题,Vue项目中嵌入了一个iframe,iframe里面的是一个html的页面,这时候想Vue和这个html之间来回互调传参,下面提供解决思路。

1.Vue调用iframe子页面中的方法

这里有一个index.html里面有这样的一些方法

<script>
  function ToFreeCameraFunc() {
      unityInstance.SendMessage("ROAM", "FreeCameraClick");
  }
  function ToAutoRoamFunc() {
      unityInstance.SendMessage("ROAM", "AutoRoamClick");
  }
  function ToManualRoamFunc() {
      unityInstance.SendMessage("ROAM", "ManualRoamClick");
  }
  function InitializationRack(oo) {
      unityInstance.SendMessage("GameManage", "InitializationRackClick",oo);
  }
  
</script>

把这个index.html引入Vue的页面中来,通常我语法是这样写的

 <div v-if="$route.meta.isShow" class="_if" >
      <iframe
        src="/static/index.html"
        id="iframetest"
        ref="iframe"
        frameborder="no"
        scrolling="no"
        allowfullscreen="true"
      ></iframe>
 </div>

我们在Vue页面中调用index.html中的方法时可以这样写:

 methods: {
    autoRoam() {
       this.$refs.iframe.contentWindow.ToAutoRoamFunc();
    },
    manualRoam() {
      this.$refs.iframe.contentWindow.ToManualRoamFunc();
    },
    freeCamera() {
      this.$refs.iframe.contentWindow.ToFreeCameraFunc();
    },
    InitializaClick(data) {
       this.$refs.iframe.contentWindow.InitializationRack(JSON.stringify(data));
    },
},

2.iframe子页面调用父Vue中的方法

这里我们直接调用父页面中的方法就调用不到了,我们需要把父页面中的方法挂载到window对象上,然后子页面中才可以调用

在父Vue页面中,我们这样写一下:

methods: {
   test(){
        console.log("111");
    } 
},
 mounted() {
    let self = this;
    window["goBack"] = () => {
        self.test();
    };
}

打印一下window对象,可以看到,我们的方法已经挂到了window对象上

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_19,color_FFFFFF,t_70,g_se,x_16

在iframe中的index.html页面中,我们只要调用父页面的window对象中的方法就可以了

<script>
	function b(){
		window.parent['goBack']();
	}
</script>

 我们看一下iframe页面中的window.parent对象

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_13,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_10,color_FFFFFF,t_70,g_se,x_16

 发现这个方法也在里面,这样就可以调用成功了。。。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值