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

  • 山姆自动续费怎么关闭(山姆自动续费怎么取消)

    山姆自动续费怎么关闭(山姆自动续费怎么取消)

  • 钉钉直播怎么发图片给老师(钉钉直播怎么发语音互动)

    钉钉直播怎么发图片给老师(钉钉直播怎么发语音互动)

  • 淘宝评论隐藏了怎么恢复(淘宝评论隐藏了还能再评价吗)

    淘宝评论隐藏了怎么恢复(淘宝评论隐藏了还能再评价吗)

  • 手机地震警报器怎么设置(手机地震警报器怎么设置vivo)

    手机地震警报器怎么设置(手机地震警报器怎么设置vivo)

  • 抖音在线显示是不是准确的(抖音在线显示是褐色的怎么回事)

    抖音在线显示是不是准确的(抖音在线显示是褐色的怎么回事)

  • 有淘宝主播id号,怎么搜(淘宝直播间主播id)

    有淘宝主播id号,怎么搜(淘宝直播间主播id)

  • 三星s8充电太慢怎么调整(三星s8充电慢解决方法)

    三星s8充电太慢怎么调整(三星s8充电慢解决方法)

  • xr来电话有闪光灯吗(iphone xr 来电闪光)

    xr来电话有闪光灯吗(iphone xr 来电闪光)

  • nova4有没有红外功能(nova4有没有红外遥控)

    nova4有没有红外功能(nova4有没有红外遥控)

  • 抖音快进特效在哪里(抖音里面的快进视频在哪里设置)

    抖音快进特效在哪里(抖音里面的快进视频在哪里设置)

  • 电脑多少分辨率最舒服(电脑多少分辨率合适)

    电脑多少分辨率最舒服(电脑多少分辨率合适)

  • 微信会员卡系统是免费的吗(微信会员卡系统免费制作平台)

    微信会员卡系统是免费的吗(微信会员卡系统免费制作平台)

  • iphone11怎么同步旧手机(iphone11怎么同步照片)

    iphone11怎么同步旧手机(iphone11怎么同步照片)

  • 华为mate30什么时候发布会(华为mate50发布日期)

    华为mate30什么时候发布会(华为mate50发布日期)

  • 芒果tv会员手机和电视可以同时登录吗(芒果tv会员手机端可以几个人用)

    芒果tv会员手机和电视可以同时登录吗(芒果tv会员手机端可以几个人用)

  • ipad怎么禁止匿名(ipad如何阻止弹出窗口)

    ipad怎么禁止匿名(ipad如何阻止弹出窗口)

  • 苹果和华为如何隔空传照片(苹果和华为如何换机)

    苹果和华为如何隔空传照片(苹果和华为如何换机)

  • 哔哩哔哩电脑版如何下载(哔哩哔哩电脑版如何缓存视频到本地)

    哔哩哔哩电脑版如何下载(哔哩哔哩电脑版如何缓存视频到本地)

  • 闲鱼申请退款卖家不处理怎么办(闲鱼申请退款卖家拒绝怎么办)

    闲鱼申请退款卖家不处理怎么办(闲鱼申请退款卖家拒绝怎么办)

  • 台式电脑怎么连接wifi步骤(台式电脑怎么连接自己的无线网络)

    台式电脑怎么连接wifi步骤(台式电脑怎么连接自己的无线网络)

  • oppo手机如何开关机(oppo手机如何开5g)

    oppo手机如何开关机(oppo手机如何开5g)

  • 手机怎么修改wifi密码名称(手机怎么修改WiFiIP地址)

    手机怎么修改wifi密码名称(手机怎么修改WiFiIP地址)

  • 火山怎么飘屏呢(火山怎么设置大屏模式)

    火山怎么飘屏呢(火山怎么设置大屏模式)

  • 苹果账户详情不可用什么意思(苹果账户详情不可用什么情况)

    苹果账户详情不可用什么意思(苹果账户详情不可用什么情况)

  • 腾讯hdr臻彩视界什么意思(腾讯hdr臻彩视界和蓝光哪个好)

    腾讯hdr臻彩视界什么意思(腾讯hdr臻彩视界和蓝光哪个好)

  • 快手怎么切换风格(快手怎么切换风格设置)

    快手怎么切换风格(快手怎么切换风格设置)

  • ps对比度快捷键(ps调对比度快捷键)

    ps对比度快捷键(ps调对比度快捷键)

  • 苹果7有个黑圈屏幕失灵(苹果7手机有个黑色圆圈)

    苹果7有个黑圈屏幕失灵(苹果7手机有个黑色圆圈)

  • 公司税后利润怎么算
  • 劳务外包人员在本公司可报销吗
  • 可供出售金融资产和长期股权投资
  • 材料卸车费包含在哪里
  • 政府奖励收入要交企业所得税么
  • 旅游业发票税率是多少
  • 一个人可以两家以上公司发放工资么
  • 固定资产租入租金计入什么科目
  • 企业重组资产转移是否涉税
  • 税金及附加怎么计提
  • 实收资本印花税是一年一交吗
  • 营改增通知及有关部门规定的税收优惠政策
  • 收到借款是承兑付款吗
  • 会务费税前扣除比例
  • 生活服务业包括哪些行业照片
  • 母公司向子公司收取管理费
  • 往来科目明细表
  • 银行账户注销以后预留印鉴
  • 华为matex3价格表
  • 鸿蒙系统图标底色变白
  • 预收账款与应收账款为什么合并
  • win7s
  • win7 excel
  • 扬声器音量调节
  • 收到对方公司开的发票怎么做账
  • 鸿蒙系统进入工程菜单
  • 企业受赠业务的法律规定
  • 一体机笔记本电脑
  • adblock规则编写
  • 强烈的建议
  • kafka图形化界面
  • 奥勒松又叫什么
  • 2021前端面试题校招
  • auto.js 逆向
  • php正则表达式匹配,返回原因
  • php面向对象优点,缺点
  • 职工教育经费的计提比例是多少
  • windowsserver2012r2远程协助灰色
  • 上传图片php
  • mysql安装问题
  • 绩效工资扣款违法么?
  • 一般纳税人报税时间每月的多少号
  • 跨月的增值税普通发票能作废吗
  • 转出未交增值税会计处理
  • 公司不注销会坐牢吗
  • 企业缴纳耕地占补多少
  • 营业外收入的账户核算有哪些
  • 红冲去年的成本怎么做账
  • 计提五险一金如何做分录
  • 收到货款未开发票是否违法
  • 没收到发票也可以入账吗
  • 企业接受捐赠如何确认收入
  • 第三季度利润
  • 查出以前年度的虚开发票,如何补税
  • 没有销售收入可以有销售费用吗
  • 年初建账的期初余额
  • 库存商品账本填写样本
  • sql的all和any
  • MySQL(win7x64 5.7.16版本)下载、安装、配置与使用的详细图文教程
  • mysql数据库简单介绍
  • ubuntu安装软件教程
  • win7系统怎么把字体调大
  • w8远程桌面连接
  • windows 9x
  • browsercore.exe是什么
  • linux如何安装rz和sz
  • win8自启动在哪儿设置
  • 错误日志项数
  • jquery 元素
  • Node.js中的事件循环是什么意思
  • 用wasfile.zip智能批量删除文件
  • unity3d怎么样
  • jQuery实现表格与ckeckbox的全选与单选功能
  • 自动登入
  • js的点击事件怎么做
  • python怎样升级
  • javascript如何写操作命令
  • 15号扣税
  • 小额贷款公司在职人员和离职人员情节哪种轻
  • 什么是新闻主管部门负责
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设