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

  • 微信没有密码和验证码还可以如何登录(微信没有密码和验证码号码怎么登录)

    微信没有密码和验证码还可以如何登录(微信没有密码和验证码号码怎么登录)

  • 微信如何删除聊天记录(微信如何删除聊天记录不能恢复)

    微信如何删除聊天记录(微信如何删除聊天记录不能恢复)

  • 8p摄像头进灰(8plus摄像头进灰)

    8p摄像头进灰(8plus摄像头进灰)

  • vsco为什么打不开(vsco不能运行)

    vsco为什么打不开(vsco不能运行)

  • 联发科6750是骁龙处理器多少(联发科6750相当于骁龙哪款)

    联发科6750是骁龙处理器多少(联发科6750相当于骁龙哪款)

  • 手机卡突然无法使用(手机卡突然无法接打电话)

    手机卡突然无法使用(手机卡突然无法接打电话)

  • 电信服务密码初始密码是多少(电信服务密码初始密码)

    电信服务密码初始密码是多少(电信服务密码初始密码)

  • 手机储存视频的文件夹(手机储存视频的文件夹叫什么)

    手机储存视频的文件夹(手机储存视频的文件夹叫什么)

  • 视频美颜打开了为什么还是没有美颜(打开视频美颜相机)

    视频美颜打开了为什么还是没有美颜(打开视频美颜相机)

  • oppoa91有红外线功能吗(oppoa91手机带不带红外线)

    oppoa91有红外线功能吗(oppoa91手机带不带红外线)

  • mh1j2ch/a是ipad几(ipadmh1j2ch/a是什么型号)

    mh1j2ch/a是ipad几(ipadmh1j2ch/a是什么型号)

  • 技嘉主板通电闪一下开不了机(技嘉主板通电闪烁)

    技嘉主板通电闪一下开不了机(技嘉主板通电闪烁)

  • 小米耳机2和2s区别(小米蓝牙耳机2和小米蓝牙耳机2s 的区别)

    小米耳机2和2s区别(小米蓝牙耳机2和小米蓝牙耳机2s 的区别)

  • 骁龙865是几纳米工艺(骁龙865是几纳米制程工艺)

    骁龙865是几纳米工艺(骁龙865是几纳米制程工艺)

  • word怎样设置文字颜色(word怎样设置文字间距)

    word怎样设置文字颜色(word怎样设置文字间距)

  • vivo出厂设置在哪(vivo出厂设置在哪?密码多少)

    vivo出厂设置在哪(vivo出厂设置在哪?密码多少)

  • 怎么设置对方打电话提示关机(怎么设置对方打不进来电话)

    怎么设置对方打电话提示关机(怎么设置对方打不进来电话)

  • 什么叫ipv6网络(什么是ipv6网络协议)

    什么叫ipv6网络(什么是ipv6网络协议)

  • 淘宝怎么切换标准版(淘宝怎么切换标准版本)

    淘宝怎么切换标准版(淘宝怎么切换标准版本)

  • 苹果6时间怎么设置(苹果6时间怎么设置在桌面)

    苹果6时间怎么设置(苹果6时间怎么设置在桌面)

  • 老人机仅紧急电话怎样解除(老人机仅紧急电话)

    老人机仅紧急电话怎样解除(老人机仅紧急电话)

  • 苹果x关机键在哪里(苹果x关机键在哪里打开)

    苹果x关机键在哪里(苹果x关机键在哪里打开)

  • 小米手环4如何设置密码(小米手环4如何绑定手机)

    小米手环4如何设置密码(小米手环4如何绑定手机)

  • 怎样发抖音短视频(怎样发抖音短视频可以上热门)

    怎样发抖音短视频(怎样发抖音短视频可以上热门)

  • 用Pytorch搭建一个房价预测模型(pytorch创建模型)

    用Pytorch搭建一个房价预测模型(pytorch创建模型)

  • 金税盘数据怎么备份
  • 股权转让主要交什么税
  • 增量留抵税额怎么做分录
  • 个体户免税金额现在是多少
  • 财产租赁合同印花税优惠政策
  • 借方是收入还是支出 正负号
  • 购进餐饮服务的会计分录
  • 合伙开有限公司注销流程
  • 发票右上角数字是什么
  • 已入账未抵扣退回发票
  • 计提坏账准备确认的信用减值损失累计金额
  • 酒店前台冲账发生错误怎么办?
  • 存货跌价卖出需要进项转出吗
  • 企业承租经营的承租人取得的所得
  • 出口公司要交哪些税费
  • 增值税申报尾差怎么做账
  • 装修预付款怎么做账
  • 航天信息服务费280元会计处理
  • 母公司对子公司的控股比例
  • 建设银行对公转账限额
  • 个税在发工资的时候直接扣下来吗
  • 安装设备领用原材料应该用成本还是公允
  • 房地产企业纳税申报需要报哪些报表
  • 非盈利组织又称
  • 分级核算下的建议有哪些
  • 尿急尿频尿不尽吃什么药效果好
  • 企业常用的消毒措施有
  • 企业间无偿借款涉税
  • 税控减免怎么做账
  • thinkphp删除文件
  • yolov5的使用
  • ieee下载论文
  • php cat
  • 哪些企业不需要做安评
  • ajax json请求
  • 员工实际工资
  • 同花顺电脑版怎么看财务报表
  • 名为股权转让实为房地产转让
  • 退货给谁
  • 建筑施工企业如何预缴增值税税款
  • 搞活动的现金红包怎么用
  • 销售费用主要包括
  • 本月增加无形资产什么时候计提折旧
  • 贷款保险费能否抵扣个税
  • 注册公司认缴和实缴的风险区别
  • 平均增长率计算公式怎么算
  • 跨年冲红发票账务处理需要调整申报表吗
  • 会计借方和贷方有哪些科目
  • mysql的概念及作用
  • SQL Server中通配符的使用示例
  • mysql怎么切换到bin目录
  • sqlserver存储过程怎么查看
  • 复制糸统
  • win7系统扫描在哪里
  • win7 系统设置
  • win10rs2是哪个版本
  • 重装系统的简写
  • unetbootin教程
  • 查看win8.1版本
  • 联想win7笔记本怎么进入bios
  • win7系统怎么禁用开机启动项
  • 打开字符面板
  • Linux rpm包中的64位、32位、i386、i586、Noarch名词解释
  • freebsd安装教程
  • cocos点击事件
  • Extjs中通过Tree加载右侧TabPanel具体实现
  • 一个简单的灵魂
  • javascript实现2048游戏示例
  • 队列remove
  • 在web项目中引入什么
  • jquery 3d旋转
  • android 进程通信
  • javascript如何学
  • 深圳前海自贸区医院是三甲吗
  • 内蒙古国地税网上办税服务厅
  • 北京社保个人账户10万元退休金多少
  • 买车险代收车船税多少钱
  • 税纳税申报表
  • 企业可以出台政策吗
  • 西安市地方税务局高新技术产业开发区分局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设