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

  • 小米平板5怎么关闭分屏(小米平板5怎么样)

    小米平板5怎么关闭分屏(小米平板5怎么样)

  • win11怎么打开任务管理器(Win11怎么打开任务管理器快捷键)

    win11怎么打开任务管理器(Win11怎么打开任务管理器快捷键)

  • b站怎么设置循环播放(b站怎么设置循环播放一个视频)

    b站怎么设置循环播放(b站怎么设置循环播放一个视频)

  • pe下格式化错误000000(pe下格式化错误000000内存有问题吗)

    pe下格式化错误000000(pe下格式化错误000000内存有问题吗)

  • 苹果微信朋友圈怎么发文字(苹果微信朋友圈发视频模糊怎么解决)

    苹果微信朋友圈怎么发文字(苹果微信朋友圈发视频模糊怎么解决)

  • 哪种视频格式占空间最小(哪种视频格式占内存最小)

    哪种视频格式占空间最小(哪种视频格式占内存最小)

  • 苹果手机卡在一个界面关不了机怎么办(苹果手机卡在一个界面退出不了只能锁屏)

    苹果手机卡在一个界面关不了机怎么办(苹果手机卡在一个界面退出不了只能锁屏)

  • 网易云属于腾讯吗(网易云属于腾讯免流吗)

    网易云属于腾讯吗(网易云属于腾讯免流吗)

  • 12123账号迁移是什么意思(12123账号迁移是驾驶证还是机动车)

    12123账号迁移是什么意思(12123账号迁移是驾驶证还是机动车)

  • 华为p30耗电快处理方法(华为p30最近耗电快)

    华为p30耗电快处理方法(华为p30最近耗电快)

  • 用投影仪看电视不伤眼睛吗(用投影仪看电视伤眼睛吗)

    用投影仪看电视不伤眼睛吗(用投影仪看电视伤眼睛吗)

  • 熄屏时钟怎么关闭(灭屏时间怎么关闭)

    熄屏时钟怎么关闭(灭屏时间怎么关闭)

  • 什么是通信网络(通信网络概念)

    什么是通信网络(通信网络概念)

  • 手机卡lte网络是什么意思(手机卡出现lte)

    手机卡lte网络是什么意思(手机卡出现lte)

  • 小爱音箱一直要充电吗(小爱音箱一直要扫码)

    小爱音箱一直要充电吗(小爱音箱一直要扫码)

  • 小爱同学是什么干什么用的

    小爱同学是什么干什么用的

  • 手机没有震动了怎么回事(手机没有震动了是什么原因vivo)

    手机没有震动了怎么回事(手机没有震动了是什么原因vivo)

  • 小米9怎么开启放大手势(小米9怎么开启无线充电)

    小米9怎么开启放大手势(小米9怎么开启无线充电)

  • vivo手机怎么隐藏应用(vivo手机怎么隐藏图标)

    vivo手机怎么隐藏应用(vivo手机怎么隐藏图标)

  • 小米哪些手机有nfc功能(小米哪些手机有哈曼卡顿)

    小米哪些手机有nfc功能(小米哪些手机有哈曼卡顿)

  • sm g9550是国行版本么

    sm g9550是国行版本么

  • vivox27微信美颜在哪(vivox27微信美颜在哪里开启)

    vivox27微信美颜在哪(vivox27微信美颜在哪里开启)

  • 微信表情两行变一行了(微信表情包变成两行)

    微信表情两行变一行了(微信表情包变成两行)

  • 19年苹果会出5g吗(5g快来了2019苹果手机还值得买吗)

    19年苹果会出5g吗(5g快来了2019苹果手机还值得买吗)

  • vivox27有nfc吗(vivox27有nfc嘛)

    vivox27有nfc吗(vivox27有nfc嘛)

  • iphone搜不到beatsx

    iphone搜不到beatsx

  • 月收入10万以下免税哪些企业适用
  • 税收负担影响企业的利润吗
  • 小规模申请专票的申请理由怎么写
  • 金税盘减免政策依据
  • 企业股东投资
  • 不征税收入和免税收入有什么区别
  • 融资租赁分摊差额扣除会计处理?
  • 建安行业核定征收企业所得税
  • pdf格式发票怎么打印标准大小
  • 收到测试费几分钱如何做账
  • 金融机构计提减值准备
  • 受托加工物资产生的成本怎么做会计核算?
  • 个税专项附加扣除是什么意思
  • 一般纳税人附加税费减免政策
  • 从对公账户转账到个人账号需要多久?
  • 美元兑人民币分时走势图
  • 操作系统不同
  • 上市公司的股份可以转卖吗
  • php提高性能
  • win10正版免费下载
  • 按揭贷款到账时间
  • 委托代销委托方需要开发票吗
  • u盘数据全部丢失
  • ghoststarttrayapp.exe是什么进程 有什么作用 ghoststarttrayapp进程查询
  • 在建工程的核算内容和范围是什么
  • 无形资产出租怎么开具发票
  • 生活常识 小常识
  • Laravel 5.5 的自定义验证对象/类示例代码详解
  • php遍历结果集
  • 土地增值税清算全流程实战案例
  • 当月缴纳上月未缴纳社保
  • php动态读取数据的代码
  • html用javascript
  • 纳税人异地预缴所得税
  • 来料加工企业的税率是多少
  • 500元以下开收据要交税吗
  • 城镇土地使用税减免税政策
  • 对外捐赠的会计处理企业会计准则和小企业会计准则
  • mysql更新视图的方式
  • access china
  • mongodb进阶与实战下载
  • 公司采购不含税产品合法吗
  • 汇算清缴没有调整怎么办
  • 还原型谷胱甘肽的作用和功效
  • sqlserver uuid怎么获取
  • 公司一年的账目怎样算
  • 计提本月应交增值税会计科目
  • 材料成本差异的会计分录
  • 产权转让印花税减半征收
  • 结转增值税的账务处理一定要通过转出未交增值税吗
  • 减资步骤
  • 发票怎么看是普票还是专票
  • 现金支票取现怎么记账
  • 融资租赁公司收费标准
  • 应付职工薪酬的会计科目
  • mysql数据库优化方案
  • mysql 5.7.17 winx64安装配置教程
  • bios设置光盘启动图解
  • linux ubuntu安装教程
  • win8进入传统界面
  • mac u 盘启动
  • win8为什么
  • centos7.0安装教程
  • Win7防火墙怎么设置
  • windows7键盘
  • linux关闭sh
  • ubuntu apt-cdrom
  • vr moke
  • opengl csdn
  • three.js菜鸟教程
  • 如何选择适合你的颂钵
  • shell脚本的fi
  • js中写for循环
  • 利用jQuery及AJAX技术定时更新GridView的某一列数据
  • js获取tbody
  • regedit.exe
  • eclipse出现an error has occurred
  • js实现表格动态合并单元格
  • 香港pcc价格
  • 官方客服热线人工台电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设