iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue中iframe结合window.postMessage实现跨域通信
  • 247
分享到

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

vueiframe跨域通信window.postMessage跨域通信vue跨域通信 2022-12-31 12:12:26 247人浏览 八月长安
摘要

目录一、前言二、应用场景2.1 嵌入页面2.2 postMessage 实现父子页面通信2.3 子页面向父页面传值2.4父页面代码:一、前言 什么是iframe? iframe 元素

一、前言

什么是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中是指什么呢?

我们首先要获取到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进阶(九十二):窗口间通信postMessage》

--结束END--

本文标题: Vue中iframe结合window.postMessage实现跨域通信

本文链接: https://www.lsjlt.com/news/176382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue中iframe结合window.postMessage实现跨域通信
    目录一、前言二、应用场景2.1 嵌入页面2.2 postMessage 实现父子页面通信2.3 子页面向父页面传值2.4父页面代码:一、前言 什么是iframe? iframe 元素...
    99+
    2022-12-31
    vue iframe 跨域通信 window.postMessage 跨域通信 vue跨域通信
  • Vue中iframe怎么结合window.postMessage实现跨域通信
    这篇文章主要介绍“Vue中iframe怎么结合window.postMessage实现跨域通信”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中iframe怎么结合window.postMess...
    99+
    2023-07-04
  • vue中iframe使用以及结合postMessage实现跨域通信
    目录使用场景需求iframe使用基本使用常用属性iframe高度自适应获取iframe的内容同域下获取父级/子级内容iframe跨域postMessage通信在vue中使用使用场景 ...
    99+
    2024-04-02
  • vue内嵌iframe跨域通信的实例代码
    目录vue内嵌iframe跨域通信1、Vue组件中如何引入iframe?2、vue如何获取iframe对象以及iframe内的window对象?3、vue如何向iframe内传送信息...
    99+
    2022-11-13
    vue内嵌iframe跨域通信 vue内嵌iframe vue内嵌 vue跨域
  • 如何利用iframe实现ajax跨域通信
    本篇内容介绍了“如何利用iframe实现ajax跨域通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在漫...
    99+
    2024-04-02
  • 使用iframe和postMessage怎么实现页面跨域通信
    这篇文章将为大家详细讲解有关使用iframe和postMessage怎么实现页面跨域通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通常情况下,对于两个不同页面的脚本,只有当执行它们的页面...
    99+
    2023-06-09
  • 使用postMessage实现iframe跨域通信的示例代码
    1、父页面内容 <!DOCTYPE html> <html> <head> <meta charset="utf-8...
    99+
    2024-04-02
  • Vue使用postMessage实现父子跨域通信
    目录一、跨域通信二、示例三、拓展阅读vue项目中postMessage的使用总结postMessage简介项目搭建一、跨域通信 1.子向父通信parent.html // 页面销毁前...
    99+
    2022-12-31
    Vue父子跨域通信 Vue postMessage Vue跨域通信 postMessage使用
  • Vue怎么使用postMessage实现父子跨域通信
    这篇文章主要讲解了“Vue怎么使用postMessage实现父子跨域通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用postMessage实现父子跨域通信”吧!一、跨域通信子...
    99+
    2023-07-04
  • 解密 JavaScript 跨域问题:轻松实现跨域通信
    跨域问题成因 跨域问题是指浏览器出于安全考虑,限制了不同域之间的脚本访问。当一个脚本试图访问另一个域上的资源时,就会触发跨域问题。跨域问题通常表现为以下几种情况: AJAX 请求被阻止 WebSocket 连接无法建立 脚本无法访...
    99+
    2024-02-23
    跨域 CORS JSONP WebSocket postMessage
  • AJAX的简介以及跨域通信的实现
    本篇内容主要讲解“AJAX的简介以及跨域通信的实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“AJAX的简介以及跨域通信的实现”吧!1.Ajax1.1.Aja...
    99+
    2024-04-02
  • JavaScript+JSONP:实现跨域数据通信的妙招
    跨域数据通信是一个常见的问题,尤其是在现代Web应用中,数据通常需要在不同的域之间进行交换。然而,由于浏览器同源策略的限制,跨域数据通信受到了一定的限制。即JavaScript脚本只能访问与加载脚本的页面来自同一个域的资源,这使得跨域数...
    99+
    2024-02-24
    JSONP 跨域 数据通信
  • Javascript实现Vue跨组件通信的方法详解
    目录概述思路要清晰实现要迅猛测试效果优化总结概述 我们都知道。 xxx.$on可以订阅一个消息。 xxx.$emit可以发布一个消息。 xxx.$off可以取消订阅一个消息。 思路要...
    99+
    2024-04-02
  • vue中前端代理跨域问题实例总结
    目录前言第一第二第三代码总结前言 这几天在学习vue进行前后端交互时出现了跨域问题,也是经历查文章查文档和自己实践总结才最终解决。这篇文章就对此进行总结,以防忘记,同时也希望能对正在...
    99+
    2024-04-02
  • nodejs如何结合socket.io实现websocket通信功能
    这篇文章主要介绍nodejs如何结合socket.io实现websocket通信功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:因为项目中有需要实时获取后台数据的场景,之...
    99+
    2024-04-02
  • Vue 中怎么利用Ajax实现跨域请求
    这篇文章给大家介绍Vue 中怎么利用Ajax实现跨域请求,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一.设置config/index.js || proxyTable添加proxyT...
    99+
    2024-04-02
  • websocket结合node.js实现双向通信的示例代码
    首先我们需要了解,什么是websocket,它的作用和优势是什么,为什么要用它。 什么是websocket websocket是基于TCP的一种双向通信协议。在此之前,一直是采用轮询...
    99+
    2023-02-10
    websocket node.js双向通信 node.js双向通信
  • vue中怎么实现组件间通信
    vue中怎么实现组件间通信,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。父组件传子组件父传子方法(一) 属性传递 props//子组件 &...
    99+
    2024-04-02
  • 怎么在vue中实现组件通信
    怎么在vue中实现组件通信?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度...
    99+
    2023-06-14
  • vue-cli中怎么实现组件通信
    vue-cli中怎么实现组件通信,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.父传子组件通信拿app.vue当父组件,content.vu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作