vue与iframe之间的交互,一看就会!

首先介绍一下使用背景,前端采用html单页面引用vue的方式(逼不得已这么做,否则直接用vue不香嘛),废话不多说

页面大致是这样,现在需要做的是在iframe页面里面触发事件跳转页面,并且使父级vue页面的左侧菜单选中相应页面的菜单,当然iframe子页面也是vue,但是其他页面也不影响

一、子页面向父页面传值

1、在iframe页面里触发事件,找到他的父级页面的dom元素,用postMessage传值,里面所有的都是参数,cmd是为了能在父级vue页面区分该操作的用途

2、在父级vue页面的周期函数mounted中监听iframe中发来的消息,传来的参数就在event.data里面。(loadHtmlFrag()则是在父级vue页面methods中的方法)

二、父页面向子页面传值

会了子页面向父业面传值,那父页面向子页面传值也就会了,就是吧一二步骤调换未知

1、在父页面中触发事件传递参数,在父页面通过ref来得到iframe子页面的dom元素,然手使用postMessage传参。

另:通过ref获取dom,父页面的iframe标签里写ref就行

2、和上面一样,在子页面的周期函数mounted中监听父页面发来的消息

好了,记录和分享就到这了

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中,可以通过使用iframe元素来实现与iframe中的内容进行数据交互。首先,在父页面中,可以通过ref属性引用iframe元素,并在mounted生命周期函数中监听iframe的加载完成事件。在加载完成事件中,可以通过postMessage方法向iframe发送消息,同时传递数据。例如,在父页面的mounted函数中可以添加以下代码: mounted() { let mapFrame = this.$refs.iframe; if (mapFrame.attachEvent) { mapFrame.attachEvent("onload", function() { let iframeWin = mapFrame.contentWindow; iframeWin.postMessage({ method: 'getBaseInfo', data: '我是vuex state的数据' }, '*'); }); } else { mapFrame.onload = function() { let iframeWin = mapFrame.contentWindow; iframeWin.postMessage({ method: 'getBaseInfo', data: '我是vuex state的数据' }, '*'); }; } } 接下来,在iframe中,可以通过window对象的addEventListener方法来监听message事件,从而接收来自父页面的消息。在message事件的回调函数中,可以通过event.data获取到传递过来的数据。例如,在iframe中可以添加以下代码: window.addEventListener('message', function(e) { console.log('e', e.data); // 数据保存在data中 }); 通过上述代码,可以实现在Vue中使用iframe进行数据交互。父页面通过postMessage方法向iframe发送消息,iframe通过message事件接收来自父页面的消息,并进行相应的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [前端vue项目和iframe项目之间的数据交互](https://blog.csdn.net/qq_42761482/article/details/123177188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vueiframe之间交互一看!](https://blog.csdn.net/deciduous_leaves/article/details/109768113)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值