温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • Vue中iframe怎么结合window.postMessage实现跨域通信

Vue中iframe怎么结合window.postMessage实现跨域通信

发布时间:2023-01-03 10:25:40 来源:亿速云 阅读:138 作者:iii 栏目: 开发技术

这篇文章主要介绍“Vue中iframe怎么结合window.postMessage实现跨域通信”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中iframe怎么结合window.postMessage实现跨域通信”文章能帮助大家解决问题。

一、前言

什么是iframe

iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。

什么是postMessage

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同协议(通常为https),端口号(443https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。

二、应用场景

在一个项目的页面中嵌入另一个项目的页面,需要实现父子,子父页面的通信。

2.1 嵌入页面

iframe使用如下(端口为8080):

<iframe id="myframe" name="myframe" :src="src" ref="iframe" scrolling="no" width="350px" height="350px" frameborder="0"></iframe>

data中定义src引入端口号为8081的页面:

src:"http://127.0.0.1:8081/#/Login",

那么问题就来了,嵌入的登录模块属于子页面(另一个项目,端口号8081)的东西,如何能让我自己的页面知道用户点击了蓝色按钮,达到登录后隐藏登录框的效果呢?在这里,postMessage就派上了用场。

2.2 postMessage 实现父子页面通信

window.postMessage中的windowiframe中是指什么呢?

Vue中iframe怎么结合window.postMessage实现跨域通信

我们首先要获取到iframecontentWindow属性放到mounted钩子函数中。

mounted() {
  this.iframeWin = this.$refs.iframe.contentWindow;
},

目标源写成 * ,具备了两个必要参数,我们就可以开始使用postMessage了。

2.3 子页面向父页面传值

在这个项目中,我需要在点击login按钮(子页面),并且登陆成功后在父页面中隐藏登录模块。

父页面如何才能知道用户点击了子页面按钮?

postMessage只是一个沟通的桥梁。

子页面说话,父页面需要听到。所以我们在父页面的mounted函数中写一个监听。

mounted() {
    window.addEventListener('message', this.handleMessage);
    this.iframeWin = this.$refs.iframe.contentWindow;
},

下面为完整代码

子页面代码:

 submit() {
   // 向父vue页面发送信息
   window.parent.postMessage({
     data: {
       code:"success",
       test:"我是子页面的test!"
     }
   }, '*');
 }

 submit() {
   // 向父vue页面发送信息
   window.parent.postMessage({
     data: {
       code:"success",
       test:"我是子页面的test!"
     }
   }, '*');
 }

父页面代码:

<div class="login" v-if="!loginStatus">
   <iframe id="myframe" name="myframe" :src="src" ref="iframe" scrolling="no" width="350px" height="350px"  frameborder="0"></iframe>
</div>
 methods: {
     handleMessage (event) {
       const data = event.data.data
        if(data.code === "success"){
            alert(data.test)
        }
     }
}

mounted() {
    window.addEventListener('message', this.handleMessage);
    this.iframeWin = this.$refs.iframe.contentWindow;
},

2.4父页面代码:

sendMessage () {
   // 外部vue向iframe内部传数据
   this.iframeWin.postMessage({
   cmd: 'success',
   data: "我是来自父页面的data!"
}, '*')

子页面监听同理。

关于“Vue中iframe怎么结合window.postMessage实现跨域通信”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节
推荐阅读:
  1. vue怎么通过点击事件弹出弹窗页面
  2. 提高开发效率和性能的Vue技巧有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue iframe window.postmessage
  • 上一篇新闻:
    Golang的select怎么使用
  • 下一篇新闻:
    C++11中longlong超长整型和nullptr初始化空指针怎么使用

猜你喜欢

  • 在Couchbase中如何利用全文搜索功能
  • Couchbase在数据查询方面有何优势和限制
  • Couchbase的主要用例和应用场景有哪些
  • 如何在Couchbase中实施访问控制和权限管理
  • Couchbase是如何支持JSON数据格式的
  • 如何在Couchbase环境中实施和利用机器学习算法
  • Teradata提供了哪些工具和接口以支持数据分析
  • 什么是Teradata的并行处理架构
  • 在Amazon Aurora中如何实现数据的加密与安全传输
  • 如何通过Aurora Global Database实现全球数据复制
最新资讯
  • 如何为Flask应用编写和运行单元测试
  • 什么是Flask-WTF它解决了哪些问题
  • 在Flask中如何实现异步任务
  • 如何在Flask应用中使用SQLAlchemy
  • Flask中的Werkzeug是什么
  • 如何在Flask中处理异常和错误页面
  • 在Flask中什么是上下文处理器
  • 如何在Flask应用中实现缓存
  • 解释Flask中的视图函数
  • Flask中的Cookie是如何工作的
相关推荐
  • vue如何自定义加载指令
  • 如何利用vue3.x绘制流程图
  • Vue路由组件如何通过props配置传参
  • 怎么使用Vue+Canvas制作简易的水印添加器小工具
  • Vue前端项目自适应布局怎么实现
  • vue+js怎么实现轮播,滚动公告,衔接效果
  • Vue常用内置指令有哪些
  • Vue项目中怎么解决跨域问题
  • Vue组件怎么设置Props
  • vue有没有内置jquery

相关标签

vue-cli vue2 vue2.x vue面试题 vue-cli3 mpvue vue框架 vuejs14 vue-element-admin vue-cil .vue vue2.5 vue打包 vue-devtools vue-cli2.x vue.draggable vue.cli vue.prototype vue-awesome-swiper vue.directive
AI

代做工资流水公司沧州对公账户流水样本绵阳办企业贷流水温州办自存流水湛江签证工资流水多少钱遵义银行流水PS样本南京对公账户流水图片宁波工资流水单报价青岛流水赣州贷款工资流水 公司邯郸企业流水打印制作宁波收入证明图片信阳银行流水账图片开封流水账单模板襄阳公司银行流水公司合肥背调工资流水公司揭阳企业贷流水代办上海转账银行流水开具青岛房贷收入证明代做兰州办理工资流水单大庆流水报价宁波银行流水账费用湘潭个人工资流水 开具台州在职证明多少钱台州流水单报价泰安做背调工资流水惠州代做企业对公流水九江贷款银行流水费用咸阳银行流水账单代办南宁工资流水报价绍兴贷款流水代做香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化