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

  • 京东自营过了7天还能退货吗(京东自营过了7天不能退货怎么办)

    京东自营过了7天还能退货吗(京东自营过了7天不能退货怎么办)

  • 三年前微信好友恢复(微信几年前的好友还能找到吗?)

    三年前微信好友恢复(微信几年前的好友还能找到吗?)

  • 隔空投送总是自动拒绝(隔空投送为什么会自动开启)

    隔空投送总是自动拒绝(隔空投送为什么会自动开启)

  • 微信支出总额怎么查(微信支出总额怎么设置)

    微信支出总额怎么查(微信支出总额怎么设置)

  • win10鼠标移动方向相反(win10鼠标自动移动到窗口边缘)

    win10鼠标移动方向相反(win10鼠标自动移动到窗口边缘)

  • 表格为什么格式刷不起作用(表格为什么格式不变)

    表格为什么格式刷不起作用(表格为什么格式不变)

  • 佳能m50能拍星空吗(佳能m50能拍星空镜头吗)

    佳能m50能拍星空吗(佳能m50能拍星空镜头吗)

  • 芯片的主要材料(手机摄像头芯片的主要材料)

    芯片的主要材料(手机摄像头芯片的主要材料)

  • 耳机typec是什么意思(typec耳机百度百科)

    耳机typec是什么意思(typec耳机百度百科)

  • 华为手机屏幕时间延长(华为手机屏幕时间不见了怎么弄回来)

    华为手机屏幕时间延长(华为手机屏幕时间不见了怎么弄回来)

  • 微信删除后重新下载聊天记录能恢复吗(微信删除后重新加回来对方知道吗)

    微信删除后重新下载聊天记录能恢复吗(微信删除后重新加回来对方知道吗)

  • 苹果7p进入刷机模式(苹果7p进入刷机怎么按)

    苹果7p进入刷机模式(苹果7p进入刷机怎么按)

  • 淘宝退货填错单号怎么修改(淘宝退货填错单号卖家拒绝退款怎么办)

    淘宝退货填错单号怎么修改(淘宝退货填错单号卖家拒绝退款怎么办)

  • 什么叫开发者模式(开发者模式4×msaa什么意思)

    什么叫开发者模式(开发者模式4×msaa什么意思)

  • 华为mate30pro镜头需要贴膜吗(华为mate30pro镜头容易刮花吗)

    华为mate30pro镜头需要贴膜吗(华为mate30pro镜头容易刮花吗)

  • airpods听歌不停断线(airpods听音乐断续)

    airpods听歌不停断线(airpods听音乐断续)

  • 网易云怎么屏蔽歌手(网易云怎么屏蔽好友看我动态)

    网易云怎么屏蔽歌手(网易云怎么屏蔽好友看我动态)

  • 朋友圈新功能动态视频怎么发(微信新功能动态朋友圈)

    朋友圈新功能动态视频怎么发(微信新功能动态朋友圈)

  • 华为Nova 5?Pro怎么截屏(华为nova5pro怎么样值得入手吗)

    华为Nova 5?Pro怎么截屏(华为nova5pro怎么样值得入手吗)

  • qq发什么有全屏特效(qq发什么有全屏特效泡泡机)

    qq发什么有全屏特效(qq发什么有全屏特效泡泡机)

  • 快手直播怎么调瘦脸(快手直播怎么调瘦身模式)

    快手直播怎么调瘦脸(快手直播怎么调瘦身模式)

  • 电脑怎么把应用放到桌面(电脑怎么把应用删干净)

    电脑怎么把应用放到桌面(电脑怎么把应用删干净)

  • 抖音的红包在哪里(抖音红包在哪里)

    抖音的红包在哪里(抖音红包在哪里)

  • 如何更改Windows11用户文件夹名字?(如何更改windows11显示语言)

    如何更改Windows11用户文件夹名字?(如何更改windows11显示语言)

  • three.js中坐标系转换以及camera的position、lookAt与up属性理解(three.js如何给模型锚点)

    three.js中坐标系转换以及camera的position、lookAt与up属性理解(three.js如何给模型锚点)

  • 【JAVA】书店管理系统(附带前后端源码及资源)(基于java的电子书店管理系统)

    【JAVA】书店管理系统(附带前后端源码及资源)(基于java的电子书店管理系统)

  • NeRF总结(nerf新手入门)

    NeRF总结(nerf新手入门)

  • 进项发票已认证,发现发票有问题怎么办
  • 今年成立的公司,残保金是否要申报
  • 小规模纳税人开具增值税专用发票
  • 企业接受赠予企业固定资产是否免税
  • 自建固定资产入账
  • 税收的性质是哪一项
  • 低值易耗品如何报废
  • 处置使用过的固定资产,税率按多少
  • 上月未抵扣完的进项税额
  • 由于汇率引起汇兑损益计入哪个科目?
  • 补发以前年度工资如何计税
  • 甲供材的范围
  • 有代扣个税的是什么人
  • 房地产土地抵扣
  • 第二个季度
  • 纳税人核定征收企业所得税
  • 专用发票抵扣联丢失怎么办最新规定
  • 股票派息后会除权吗
  • 房地产行业规定
  • 公司注销后股东承担责任的法律规定
  • 财务费用包括哪些主要内容
  • 如何让自己的网站被百度收录
  • windows7如何删除软件
  • win10壁纸图片怎么删除
  • 在win10系统中,如何限制孩子玩原神游戏
  • win7鼠标点右键没反应
  • xp系统怎么取消用户登录
  • 会计的职责概述
  • 期初银行余额有误怎么调分录怎么写
  • googlechrome谷歌浏览器
  • 如何恢复撤回的信息微信
  • 经营性流动负债计算公式
  • 经营租入固定资产的租赁费计入
  • 如何用wordpress
  • 长期债权投资收回的利息 现金流量表
  • php实现图片上传显示
  • 接受捐赠旧的固定资产以什么价格入帐
  • php面向过程
  • php foreach as
  • php实现数据库查询
  • 若依框架前端发请求
  • 为etc充值
  • 航天金税盘维护费什么时候交
  • 铁路运费的印花税进什么科目
  • 折扣和佣金合法的两个条件是什么?
  • 开发产品的成本
  • 延迟开票如何规避风险
  • 物业增值服务主要有哪些
  • 理财产品分红和收益
  • 购买办公用品没有发票可以入账吗
  • 人员经费指的是
  • 递延所得税的会计核算
  • 主营业务收入计入借方还是贷方
  • 停产期间发生的事故
  • 发票金额与实际金额不符怎么举报
  • 什么样的发票公司可以开
  • 开票金额和税款的关系
  • 在企业中的应用
  • 绿化补偿标准
  • 凭证上的数字金额怎么填
  • Mysql 1864 主从错误解决方法
  • win7怎么看
  • vmware虚拟机安装Linux教程
  • 神之浩劫能玩吗
  • ubuntu server snap
  • linux系统bug
  • win8系统升级后怎么退回
  • centos直接进入命令行
  • win7电脑ip地址怎么查
  • 查找重复字符串
  • nodejs数据加密
  • NGUI 响应touchscript 的 tuio动作
  • jquery实现全选和取消全选
  • js下拉菜单的制作方法
  • 环保税征收标准可以改吗
  • 非营利组织认定条件
  • 税务清单模板
  • 国税地税分开原因
  • 邮政银行开税票要什么材料
  • 全国城管改革什么时候结束
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设