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

  • 微信直播如何投诉(微信直播如何投诉商家)

    微信直播如何投诉(微信直播如何投诉商家)

  • 苹果手机静音怎么打电话才能响(苹果手机静音怎么不震动)

    苹果手机静音怎么打电话才能响(苹果手机静音怎么不震动)

  • qq唱歌红包怎么没了(QQ唱歌红包怎么没有了)

    qq唱歌红包怎么没了(QQ唱歌红包怎么没有了)

  • ios13.3怎么打开小圆点(13jz怎么打开)

    ios13.3怎么打开小圆点(13jz怎么打开)

  • 苹果飞行模式对方听到什么(苹果飞行模式对方还能查找到位置吗)

    苹果飞行模式对方听到什么(苹果飞行模式对方还能查找到位置吗)

  • qc3.0对充电线有要求吗(qc3.0和普通充电器区别)

    qc3.0对充电线有要求吗(qc3.0和普通充电器区别)

  • 三星s20+和三星s10+对比(三星s20+和三星s10+参数对比)

    三星s20+和三星s10+对比(三星s20+和三星s10+参数对比)

  • no print cartridge是什么意思

    no print cartridge是什么意思

  • 快手怎么把点赞的视频全部取消(快手怎么把点赞的作品公开)

    快手怎么把点赞的视频全部取消(快手怎么把点赞的作品公开)

  • 荣耀30是华为的吗(荣耀30是华为的吗怎么样)

    荣耀30是华为的吗(荣耀30是华为的吗怎么样)

  • 200m宽带用什么网线(200m宽带用什么路由器)

    200m宽带用什么网线(200m宽带用什么路由器)

  • 苹果手机没有4g网怎么回事显示E(苹果手机没有4g信号了怎么处理)

    苹果手机没有4g网怎么回事显示E(苹果手机没有4g信号了怎么处理)

  • 金立手机充电慢是怎么回事(金立手机充电慢怎么办,耗电快)

    金立手机充电慢是怎么回事(金立手机充电慢怎么办,耗电快)

  • qq注册不安全行为怎么解决(qq账号注册显示不安全)

    qq注册不安全行为怎么解决(qq账号注册显示不安全)

  • 替换是什么快捷键(替换快捷键是什么)

    替换是什么快捷键(替换快捷键是什么)

  • 陌陌注销后90天才能注册吗(陌陌注销90天才可以注册)

    陌陌注销后90天才能注册吗(陌陌注销90天才可以注册)

  • 微信头像模糊咋回事(微信头像模糊咋弄)

    微信头像模糊咋回事(微信头像模糊咋弄)

  • 腾讯视频ipad不满屏幕(腾讯视频ipad不能扫码登录吗)

    腾讯视频ipad不满屏幕(腾讯视频ipad不能扫码登录吗)

  • 三星手机无法开机的原因(三星手机无法开机 导出数据)

    三星手机无法开机的原因(三星手机无法开机 导出数据)

  • 快手视频怎么导入快影(快手视频怎么导出音频)

    快手视频怎么导入快影(快手视频怎么导出音频)

  • 手机突然白屏怎么回事(手机突然白屏怎么办oppo)

    手机突然白屏怎么回事(手机突然白屏怎么办oppo)

  • 手机锁屏后出现热点资讯怎么关闭(手机锁屏后出现各种新闻广告怎么办)

    手机锁屏后出现热点资讯怎么关闭(手机锁屏后出现各种新闻广告怎么办)

  • 目前最窄下巴的手机(目前最窄下巴的女人面相)

    目前最窄下巴的手机(目前最窄下巴的女人面相)

  • 苹果xr相机怎么设置镜像(苹果xr相机怎么设置拍照效果最好)

    苹果xr相机怎么设置镜像(苹果xr相机怎么设置拍照效果最好)

  • excel强调文字颜色在哪(Excel强调文字颜色怎么设置)

    excel强调文字颜色在哪(Excel强调文字颜色怎么设置)

  • window7和8和10的区别在哪(win 8和win 7有什么区别)

    window7和8和10的区别在哪(win 8和win 7有什么区别)

  • 交印花税合同上每个月价格要一样吗
  • 外购商品捐赠进哪个科目
  • 围挡制作开票的税收分类
  • 小规模纳税人报销会计分录
  • 销售发票红冲会计分录怎么做?
  • 应纳出口关税怎么算
  • 退回多扣社保分录
  • 生产的产品不合格作废会计分录
  • 纸箱报废处理怎么做账
  • 银行余额调节表模板
  • 购物开了增值税怎么退
  • 防洪费2019年税率
  • 出口退税的企业范围
  • 查账征收企业所得税年度申报
  • 出口企业增值税优惠政策
  • 当期损益包括营业外收支吗
  • 10万元以下免征教育费附加
  • 处于成熟期的企业其预算模式的特点是以什么为起点
  • 资金占用利息怎么开票
  • 税金及附加包括个人所得税吗
  • 出口旧设备最新政策
  • 实行简易征收
  • win10家庭最新版
  • 个税退手续费怎么申请
  • php连接sqlserver2008
  • wifi信号弱了
  • 全网最详细的破解卡密软件教程[2021首发]
  • 如何配置无线路由器参数
  • 核定征收的企业怎么交所得税
  • 贸易公司出口退税政策最新
  • PHP:pg_escape_bytea()的用法_PostgreSQL函数
  • 医院的重要
  • 用php写个简单的编程
  • 委托贷款账务处理
  • 预算会计与财务会计适度分离
  • 浏览器同源策略限制
  • 成本价低于现价 应该卖吗
  • 分页limit参数
  • php入门基础教程
  • 餐厅场租费可以开发票吗
  • 企业福利费超过预算收入
  • Linux下实现MySQL数据备份和恢复的命令使用全攻略
  • 归属于母公司所有者权益合计
  • 自然人个税申报密码怎么获取
  • 合并报表调整分录理解
  • sqlserver设置简单模式
  • asp连接mysql数据库
  • 公允价值变动属于
  • 托收承付方式销售商品是什么意思
  • 开具发票时如何做账务处理?
  • 工人晚上加班的说说心情
  • 专利财政补贴
  • 库存现金日记账怎么填
  • 季报企业所得税弥补亏损数怎么填
  • 盈余公积的会计分录
  • 分公司费用报销
  • 支付水电费取得专用发票上注明税金0.68万元
  • 施工单位上报
  • 苹果mac怎么下载英雄联盟
  • centos6.5设置网络
  • centos7安装视频教程
  • linux的命令行界面
  • 删除linux系统命令
  • unity加密解决方案
  • adobe骨骼动画
  • Unity3D游戏开发基础
  • python ftps
  • sticky memo widget
  • JQuery实现Ajax加载图片的方法
  • jquery jwt
  • 实现一个完整的主要任务
  • python pil gif
  • python连接mysql实例分享
  • 安卓手机管家删除的照片怎么恢复
  • 江苏食品经营许可证企业端官网
  • 车辆购置税需要每年都交吗
  • 个税申报所属期和所得期
  • 地税局社保宣传标语
  • 税控防伪清单
  • 江苏税务局网上预缴税流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设