位置: 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语言)

  • 网站怎样打好地基(网站怎么添加网站地图)

    网站怎样打好地基(网站怎么添加网站地图)

  • 华为手机如何识别花草(华为手机如何识图)

    华为手机如何识别花草(华为手机如何识图)

  • 苹果双卡为什么副卡是关机(苹果双卡为什么有一张是无服务 ?)

    苹果双卡为什么副卡是关机(苹果双卡为什么有一张是无服务 ?)

  • 3400g相当于什么cpu(3400g相当于什么intelcpu)

    3400g相当于什么cpu(3400g相当于什么intelcpu)

  • 三星手机安全模式怎么关闭(三星手机安全模式)

    三星手机安全模式怎么关闭(三星手机安全模式)

  • 计算机6个性能指标(计算机6个性能是什么)

    计算机6个性能指标(计算机6个性能是什么)

  • iqooneo3电池容量(iqooneo3电池容量4430)

    iqooneo3电池容量(iqooneo3电池容量4430)

  • 拼多多钱包在哪里找(拼多多钱包在哪里可以看见)

    拼多多钱包在哪里找(拼多多钱包在哪里可以看见)

  • 苹果lte设置成4g(iphone lte改4g)

    苹果lte设置成4g(iphone lte改4g)

  • 苹果无线耳机怎么控制音乐(苹果无线耳机怎么调音量大小)

    苹果无线耳机怎么控制音乐(苹果无线耳机怎么调音量大小)

  • 苹果11pro电池百分比怎么设置(苹果11pro电池百分比)

    苹果11pro电池百分比怎么设置(苹果11pro电池百分比)

  • 微信二维码怎么改店名(微信二维码怎么打印出来)

    微信二维码怎么改店名(微信二维码怎么打印出来)

  • 5g基站多少米一个(5g基站多少米一个辐射大吗?)

    5g基站多少米一个(5g基站多少米一个辐射大吗?)

  • 电脑word页面设置在哪(电脑word页面设置在哪里找?)

    电脑word页面设置在哪(电脑word页面设置在哪里找?)

  • 电竞屏有必要吗(电竞屏需要更好的显卡吗)

    电竞屏有必要吗(电竞屏需要更好的显卡吗)

  • win10锁屏壁纸在哪个文件夹(win10锁屏壁纸在哪)

    win10锁屏壁纸在哪个文件夹(win10锁屏壁纸在哪)

  • OPPO r9微信分身怎么操作(oppo r9手机微信分身)

    OPPO r9微信分身怎么操作(oppo r9手机微信分身)

  • 嗨来电怎么关闭(嗨来电铃声怎么取消)

    嗨来电怎么关闭(嗨来电铃声怎么取消)

  • 106905695559什么交通短信(1069095959是什么号码)

    106905695559什么交通短信(1069095959是什么号码)

  • 快手第一个作品怎么火(快手第一个作品两千播放量正常吗)

    快手第一个作品怎么火(快手第一个作品两千播放量正常吗)

  • 小红书如何取消收藏(小红书如何取消粉丝关注)

    小红书如何取消收藏(小红书如何取消粉丝关注)

  • 苹果x能设置微信密码锁(苹果x设置微信密码锁在哪里)

    苹果x能设置微信密码锁(苹果x设置微信密码锁在哪里)

  • Win10网络电缆未正确插入或可能已损坏[已解决](罗马尼亚卫生部长)

    Win10网络电缆未正确插入或可能已损坏[已解决](罗马尼亚卫生部长)

  • python如何导入不同目录下的包(python导入其他文件的函数)

    python如何导入不同目录下的包(python导入其他文件的函数)

  • 2023高频前端面试题(持续更新 含答案)(2021高频前端面试题汇总)

    2023高频前端面试题(持续更新 含答案)(2021高频前端面试题汇总)

  • 财税通财务软件如何调整凭证间距
  • 交了9个点的工程增值税不可以抵扣吗
  • 印花税技术合同计税依据
  • 小微企业应纳税所得额超过300万怎么办
  • 新会计准则土地使用权摊销处理
  • 企业销售使用过的固定资产
  • 广告公司如何申报文化事业建设税
  • 个人账户作为公司私账
  • 去年购进的货物今年才收到发票
  • 汇算清缴期间费用社保填哪里
  • 跨年度的银行未入账如何处理
  • 当期未开票过收入,以后开票怎么做会计分录
  • 建筑施工外包
  • 企业进行股票买入的条件
  • 发票作为付款凭证的案例
  • 固定资产折旧属于制造费用吗
  • 增值税发票进项抵扣是什么意思
  • 企业员工用自己手机发送工作
  • 房地产企业预收账款
  • 个税申报异常怎么办
  • 电子票据查询打印
  • 办理税务迁移
  • 小规模企业交纳印花税吗
  • 捐赠计提管理费的账务处理?
  • 发工资一定要交税吗
  • 在win7系统中,添加打印机驱动程序
  • 前期差错更正怎么理解
  • PHP:oci_field_is_null()的用法_Oracle函数
  • Content-Disposition使用方法和注意事项
  • windows7简洁版
  • 不动产出租管理办法
  • 营改增开始时间
  • 【已解决】VUE3+webpack >5报错问题
  • 圣米歇尔山法语介
  • net python
  • opencv模板匹配原理
  • react redux reducer
  • 折旧提取后资金如何处理
  • 残疾人就业保障金计入什么科目
  • 公司的钱借给个人必须要有利息吗
  • 产成品报废会计处理
  • 印花税实收资本和资本公积
  • 建筑业预缴增值税计算公式
  • 三项经费要包括哪三项
  • mysql存储过程语句
  • 增值税专用发票的税率是多少啊
  • 小规模纳税人都是3%吗
  • 多处取得工资薪金
  • 筹资现金流量净额
  • 房产税的纳税人包括
  • 不开票销售收入怎么做账务处理
  • 固定资产清理后折旧怎么处理
  • 转移固定资产是指什么
  • 出口退税项目
  • 计提以前年度应付股利的分录
  • 购入土地使用权的,以评估价格为计税依据
  • 销售折让如何核算
  • 购入旧的固定资产还能一次性抵扣吗
  • 内账会计工作职责和工作流程
  • sql储存过程
  • mysql存储过程的语句块以什么开始以什么结束
  • 下载win10 32位
  • 播放windows xp
  • 如何解决孩子多动
  • os x10.11el capitan公测版下载地址(公测版计划注册教程)
  • ubuntu怎么解压缩文件
  • ubuntu源代码
  • vmware 安装教程
  • spvic.exe - spvic是什么进程 有什么作用
  • created directory cfg怎么办
  • 000.exe病毒
  • windows 8.1将“计算机”(This PC)更名为“此电脑”
  • win10关闭defender方法
  • 自由选择工具快捷键
  • mobile windows
  • eclipse安转
  • 如何查询纳税信用等级证明
  • 重庆地方税务局发票查询
  • 下载国税网上申报
  • 服务类发票 如何入账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设