位置: IT常识 - 正文

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

发布时间:2024-01-16
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语言)

  • oppor9s怎么投屏到电视上去(oppor9s怎么投屏到电脑上)

    oppor9s怎么投屏到电视上去(oppor9s怎么投屏到电脑上)

  • 魅族18s是2k屏吗(魅族18 18s 18x)

    魅族18s是2k屏吗(魅族18 18s 18x)

  • 手机呼叫限制密码是什么(手机呼叫限制密码怎么设置)

    手机呼叫限制密码是什么(手机呼叫限制密码怎么设置)

  • kindle需要关闭屏幕吗(kindle的关闭屏幕是关机的意思吗)

    kindle需要关闭屏幕吗(kindle的关闭屏幕是关机的意思吗)

  • 三星s20型号(三星S20型号SM-G9860)

    三星s20型号(三星S20型号SM-G9860)

  • med一al20是华为什么型号(med一al20是华为多少)

    med一al20是华为什么型号(med一al20是华为多少)

  • 联想笔记本投影切换快捷键是什么(联想笔记本投影到此电脑怎么打开)

    联想笔记本投影切换快捷键是什么(联想笔记本投影到此电脑怎么打开)

  • SMS是什么(sms是什么的缩写)

    SMS是什么(sms是什么的缩写)

  • 华为耳机充电盒充不进去电(华为耳机充电盒怎么拆开)

    华为耳机充电盒充不进去电(华为耳机充电盒怎么拆开)

  • 为什么屏幕镜像打不开(为什么屏幕镜像连不上)

    为什么屏幕镜像打不开(为什么屏幕镜像连不上)

  • 爱奇艺的弹幕是即时的吗(爱奇艺的弹幕是评论吗)

    爱奇艺的弹幕是即时的吗(爱奇艺的弹幕是评论吗)

  • 电脑开机风扇声音很大(电脑开机风扇声音很大但电脑没反应)

    电脑开机风扇声音很大(电脑开机风扇声音很大但电脑没反应)

  • 手机电量低就卡怎么办(手机耗电量太快怎么解决)

    手机电量低就卡怎么办(手机耗电量太快怎么解决)

  • 1pps是什么意思(pp1是什么意思哦)

    1pps是什么意思(pp1是什么意思哦)

  • 抖音怎么开通访客记录(抖音怎么开通访客功能)

    抖音怎么开通访客记录(抖音怎么开通访客功能)

  • 乐视手机如何设置闹钟(乐视手机如何设置虚拟按键)

    乐视手机如何设置闹钟(乐视手机如何设置虚拟按键)

  • 双卡怎么切换流量(双卡怎么切换流量oppo)

    双卡怎么切换流量(双卡怎么切换流量oppo)

  • 拼多多的猪在页面怎么去掉(拼多多上的猪在桌面上怎么删了)

    拼多多的猪在页面怎么去掉(拼多多上的猪在桌面上怎么删了)

  • word中如何发邮件合并(如何在word上发邮件)

    word中如何发邮件合并(如何在word上发邮件)

  • 淘宝未读是拉黑了吗(淘宝信息未读是真的未读吗)

    淘宝未读是拉黑了吗(淘宝信息未读是真的未读吗)

  • vivox27防水防尘吗(vivox60防水防尘)

    vivox27防水防尘吗(vivox60防水防尘)

  • 苹果手机5g可以用吗(苹果手机5g可以切换成4g吗)

    苹果手机5g可以用吗(苹果手机5g可以切换成4g吗)

  • 微信在哪里看实名认证(微信在哪里看实名认证的名字)

    微信在哪里看实名认证(微信在哪里看实名认证的名字)

  • 手机校准在哪里(手机校准器下载)

    手机校准在哪里(手机校准器下载)

  • applepencil一二代对比(applepencil 一代二代)

    applepencil一二代对比(applepencil 一代二代)

  • 苹果手机怎么下载探探(苹果手机怎么下载微信分身)

    苹果手机怎么下载探探(苹果手机怎么下载微信分身)

  • windows11关机键怎么弄出来(windows11关机键怎么设置经典菜单)

    windows11关机键怎么弄出来(windows11关机键怎么设置经典菜单)

  • 织梦cms信息提示修改方法(织梦cms要钱吗)

    织梦cms信息提示修改方法(织梦cms要钱吗)

  • 小规模纳税人公户的钱怎么转出来
  • 国际避税地是什么
  • 什么是试算平衡?如何进行试算平衡
  • 销售货物应税劳务服务清单给客户一份是不是就可以了
  • 投资控股型公司什么意思
  • 会计二级科目是哪个
  • T3现金流量表怎么删除
  • 天猫的费用一共17个分别是什么
  • 金融企业往来收入科目属于什么科
  • 营改增后建筑企业的账务处理
  • 加工样品全流程总结
  • 收到增值税专用发票是已经付款了吗
  • 补缴以前年度税费
  • 股东转让股权印花税怎么交税
  • 在建工程的招待费计入到哪个科目
  • 物业收停车费要交房产税吗
  • 物业费增值税是什么税
  • 增值税普通发票税率
  • 公司购买的矿泉水属于什么科目
  • 普通机打发票可以抵税吗
  • 分公司非独立核算是什么意思
  • 营业成本主要包括
  • 公司废业
  • 公司成立之初
  • 然后安装电脑系统
  • 电脑右键一直转圈
  • 投资性房地产减值准备属于什么科目
  • uniapp多端兼容
  • 企业所得税职工福利扣除标准
  • 格里戈里耶奈尔尤伯夫
  • 固定资产减少的账务处理
  • 老税号的发票还能认证吗
  • 保安行业税率是多少
  • vue3版本网页小游戏
  • 原材料用于在建工程,进项税为什么不转出
  • syslog使用
  • 公立医院事业单位工作人员招聘实践考核自我评价
  • 企业如何做增值业务
  • 注册公司时企业类型为什么没有自然人独资
  • 企业投资股权收益如何征税
  • 股权转让会计分录借银行存款
  • 金税盘抵增值税
  • 销售折让的会计分录怎么做
  • 被财政收回的财物有哪些
  • 员工出差报销的餐费怎么下账
  • 咨询费放到什么科目
  • 支付稿费需要发票吗
  • 认证失败,未获取到区域信息
  • 公司报税金额和实际发的不一致可以去告吗?
  • 股权转让的会计资料归谁所有
  • 运杂费扣除增值税进项税额
  • 收到银行利息记什么会计科目
  • 非流动性资产有
  • 没有对公业务的银行
  • 企业共同控制持股比例怎么算
  • 事业单位企业所得税汇算清缴怎么做
  • 这么查看
  • win7怎么删除win10系统
  • 系统停止工作
  • mac显示所有窗口的快捷键
  • Oracle VM Virtual中CentOS自动获取IP地址设置方法
  • 电脑avg是什么软件
  • 桌面管理在哪里打开
  • win8设置关机键
  • win8系统怎么安装软件
  • git怎么备份
  • 注册表没有windows nt
  • ssh encountered 1 errors during the transfer错误3种解决方法
  • cocos2dx视频教程
  • jquery源码是什么水平
  • python3 django教程
  • android:padding="10dp"
  • 安卓手机照片压缩
  • python操作数据库语句
  • c#入门实例
  • javascriptz
  • jquery使用Cookie和JSON记录用户最近浏览历史
  • Javascript Objects详解
  • 江苏省全电发票开通流程
  • 企业填写莞e申报的通知
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号