位置: IT常识 - 正文

vue内嵌iframe跨域通信(vue页面嵌套iframe vue页面)

编辑:rootadmin
vue内嵌iframe跨域通信

推荐整理分享vue内嵌iframe跨域通信(vue页面嵌套iframe vue页面),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue iframe 跨域,vue页面嵌套iframe vue页面,vuex iframe,vue如何加跨域处理,vue页面嵌套iframe vue页面,vue使用iframe跳转别的页面,vue 嵌入iframe,vue页面嵌套iframe vue页面,内容如对您有帮助,希望把文章链接给更多的朋友!

1、Vue组件中如何引入iframe?

2、vue如何获取iframe对象以及iframe内的window对象?

3、vue如何向iframe内传送信息?

4、iframe内如何向外部vue发送信息?

一、Vue组件中如何引入iframe?

直接通过添加iframe标签,src属性绑定data中的src,第一步引入就完成了

<template> <div class="act-form"> <iframe :src="src"></iframe> </div></template><script>export default { data () { return { src: '你的src' } }}</script>vue内嵌iframe跨域通信(vue页面嵌套iframe vue页面)

二、vue如何获取iframe对象以及iframe内的window对象?

获取iframe的window对象,因为只有拿到这个对象才能向iframe中传值

<template> <div class="act-form"> <iframe :src="src" ref="iframe"></iframe> </div></template><script>export default { data () { return { src: '你的src' } }, mounted () { // 这里就拿到了iframe的对象 console.log(this.$refs.iframe) // 这里就拿到了iframe的window对象 console.log(this.$refs.iframe.contentWindow) }}</script>

三、vue如何向iframe内传送信息?

通过postMessage,具体关于postMessage是什么,自己去google,   我的理解postMessage是有点类似于UDP协议,就像短信,是异步的,你发信息过去,但是没有返回值的,只能内部处理完成以后再通过postMessage向外部发送一个消息,外部监听message   为了让postMessage像TCP,为了体验像同步的和实现多通信互不干扰,特别制定的message结构如下

{ cmd: '命令', params: { '键1': '值1', '键2': '值2' }}

 通过cmd来区别这条message的目的

具体代码如下

<template> <div class="act-form"> <iframe :src="src" ref="iframe"></iframe> <div @click="sendMessage">向iframe发送信息</div> </div></template><script>export default { data () { return { src: '你的src', iframeWin: {} } }, methods: { sendMessage () { // 外部vue向iframe内部传数据 this.iframeWin.postMessage({ cmd: 'getFormJson', params: {} }, '*') }, }, mounted () { // 在外部vue的window上添加postMessage的监听,并且绑定处理函数handleMessage window.addEventListener('message', this.handleMessage) this.iframeWin = this.$refs.iframe.contentWindow }, handleMessage (event) { // 根据上面制定的结构来解析iframe内部发回来的数据 const data = event.data switch (data.cmd) { case 'returnFormJson': // 业务逻辑 break case 'returnHeight': // 业务逻辑 break } }}</script>

四、iframe内如何向外部vue发送信息?

现在通过单击‘向iframe发送信息’这个按钮,从外部vue中已经向iframe中发送了一条信息

{ cmd: 'getFormJson', params: {}}

那么iframe内部如何处理这个信息?

<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <title>iframe Window</title> <style> body { background-color: #D53C2F; color: white; } </style></head><body> <h1>Hello there, i'm an iframe</h1> <script> // 向父vue页面发送信息 window.parent.postMessage({ cmd: 'returnHeight', params: { success: true, data: document.body.scrollHeight + 'px' } }, '*'); // 接受父页面发来的信息 window.addEventListener("message", function(event){ var data = event.data; switch (data.cmd) { case 'getFormJson': // 处理业务逻辑 break; } }); </script></body></html>

至此为止,内部的收发信息和外部的收发信息都已解决!

下面是完整代码:

<template> <div class="act-form"> <div class="nav"> <img src="https://www.yuucn.com/wp-content/uploads/2023/04/1682042997-37fa8c727f1f06d.png" @click="back()"> <div class="title">报名</div> </div> <div class="iframe-out"> <iframe :src="src" ref="iframe" @load="iframeLoad"></iframe> </div> <div v-if="isLoaded" class="send-form"><div class="send" @click="sendMessage()">提交</div></div> </div></template><!-- Add "scoped" attribute to limit CSS to this component only --><style lang="sass" rel="stylesheet/sass"> @import "style.scss";</style><script>import { Toast, Indicator } from 'mint-ui'import api from '@/utils/api'export default { data () { return { src: '', iframeWin: null, isLoaded: false } }, created () { let matchFamily = this.$store.state.matchFamily this.src = process.env.BASE_URL + '/matches/' + matchFamily.match.id + '/act/' + matchFamily.act.id + '/joinweb?token=' + this.$store.state.token }, mounted () { window.addEventListener('message', this.handleMessage) this.iframeWin = this.$refs.iframe.contentWindow // 开启加载动画 Indicator.open({ text: '努力加载中...', spinnerType: 'triple-bounce' }) }, methods: { back () { this.$router.push('/actIntro') }, sendMessage () { this.iframeWin.postMessage({ cmd: 'getFormJson', params: {} }, '*') }, iframeLoad () { // 关闭加载动画 Indicator.close() }, async handleMessage (event) { const data = event.data switch (data.cmd) { case 'returnFormJson': if (data.params.success) { // 调用报名方法 await this.enroll(data.params.data) } else { console.log('returnFormJson失败') console.log(data.params) } break case 'returnHeight': if (data.params.success) { this.$refs.iframe.height = data.params.data this.isLoaded = true } break } }, async enroll (data) { let matchFamily = this.$store.state.matchFamily let result = await api.enroll(matchFamily.match.id, matchFamily.act.id, data) if (result.success) { if (result.data.status === 'no_pay') { // 更新缓存 let resultMatch = await api.match(matchFamily.match.id, {}) if (resultMatch.success) { this.$store.commit('SET_CURRENT_MATCH', resultMatch.data) } Toast({ message: '报名成功', position: 'bottom' }) this.$router.push('/match/' + matchFamily.match.id + '/mdetail') } else { console.log('需要跳转到支付页面') } } } }}</script>
本文链接地址:https://www.jiuchutong.com/zhishi/297404.html 转载请保留说明!

上一篇:js查找数组中符合条件的元素(js查找数组所有符合条件数据)

下一篇:【蓝桥杯真题】当蓝桥杯开设Web组之后,对几题能拿省一?(蓝桥杯真题c语言)

  • 首套房契税税率是多少?
  • 甲企业持有乙企业的非上市股票2000股
  • 一般纳税人劳务票一般开几个点
  • 购车增值税可以抵扣多少
  • 油费补贴计入什么科目
  • 网上认证勾选平台登录不成功
  • 个人生产经营所得税税率表
  • 制造费用工资结转怎么算
  • 本月做未开票收入,下月开票怎么做账
  • 出口免税收入会退税吗
  • 未分配利润调整会计分录
  • 计提房屋折旧会计分录
  • 产品成本科目包括
  • 小规模纳税人是简易计税吗
  • 发票作废税金怎么算
  • 小微企业免征税额
  • 国税里发票采集中的税控机动车发票是指什么发票?
  • 建安企业需要交环保税吗
  • 预付卡增值税如何申报
  • 购进原材料不用交税吗
  • 居民企业清算企业所得税
  • 应收款收不回账务处理
  • 上一年度多交年度所得税可以退税吗
  • 社保打入其他公司代扣分录怎么做?
  • windows7的笔记本有哪些
  • 如何降低融资成本率
  • 商贸公司商品品种规格多如何核算
  • 个人所得税计算方法及抵扣方法
  • 预提费用年终有余额怎么办
  • 注册表怎么启动
  • 腾讯电脑管家病毒库更新
  • win11测试版和正式版区别
  • 合同结算账务处理分录
  • php字符串变量
  • 收到招标费用会计分录
  • 高新技术企业产品是什么意思
  • 表单校验html5
  • yarn install报错
  • 进项票留底怎么做分录
  • 发票复核和收款人未填写
  • 前端开发软件哪个最好
  • 前端笔记软件
  • lvs命令
  • 销售货款无法收到怎么办
  • fstrim命令
  • 长投转可供
  • 广告片影视公司
  • 运营费的税率
  • 收到餐饮费专用发票会计分录
  • java中map.entry
  • 工会经费的计提基数不包括
  • 货币资金的计税基础
  • 普通增值税发票会计科目如何写?
  • 公司减少注册资本的条件和程序
  • 金税四期对企业的好处
  • 收据不能入账如何处理
  • 物业公司收的停车费做什么科目
  • 以货换货如何做账
  • 免缴土地使用税是不是不用交税
  • 已付款收货未收货怎么办
  • 缴纳工会筹备金应该记什么科目
  • 工资条上为什么不显示生育险
  • 微软推出新系统发布会
  • Vista下jusched.exe进程与禁用
  • 卸载微信后重新登录微信怎么恢复之前的数据
  • mac怎么自动清理垃圾软件
  • freebsd使用
  • 怎么调整桌面图标间距
  • 如何快速卸载游戏
  • os x 10.10 yosemite自动纠正怎么关?os x yosemite自动纠正功能关闭教程
  • mac视频预览图不显示
  • mac之间传送帐号怎么传送
  • 安装软件时提示无法访问网络位置
  • windows xp的控制面板
  • linux文件权限的设置与修改
  • cocos2048
  • js获取0-100随机数
  • javascript闭包函数
  • express如何使用
  • 四川税务申报如何网上申报零申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设