iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue怎么使用postMessage实现父子跨域通信
  • 350
分享到

Vue怎么使用postMessage实现父子跨域通信

2023-07-04 21:07:41 350人浏览 八月长安
摘要

这篇文章主要讲解了“Vue怎么使用postMessage实现父子跨域通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用postMessage实现父子跨域通信”吧!一、跨域通信子

这篇文章主要讲解了“Vue怎么使用postMessage实现父子跨域通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用postMessage实现父子跨域通信”吧!

一、跨域通信

子向父通信
parent.html

// 页面销毁前,务必去除监听器,否则会造成资源泄露!beforeDestory () {window.removeEventListener('message', this.listenerFun)}mounted() {window.addEventListener('message',this.listenerFun)}methods: {  listenerFun (e) {console.log(e.data);    if(e.data.msg==='xxx'){            // 业务处理逻辑    }  }}

child.html

window.parent.postMessage({ msg:"xxx"},'*');

父向子通信
parent.html

var myframe = document.getElementById('myframe') //获取iframemyframe.contentWindow.postMessage({data:'parent'}, childDomain);//childDomain是子页面的源(协议+主机+端口号)

child.html

window.addEventListener('message', function(e){      console.log(e.data.data);})

注意:

  • 子向父,子postMessage,父监听message;

  • 父向子,父postMessage,子监听message;

  • 测试发现,子向父postMessage的时候,源可以写为‘*’,父向子postMessage的时候,源需要写成子的源,(也就是子页面的协议+主机号+端口);

二、示例

parent.html

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>iframe父级页面</title>  <style>      * {          padding: 0;          margin: 0;      }      iframe {          width: 200px;          height: 200px;      }  </style></head><body>  <h3>我是父级页面</h3>  <button id='btn'>父页面的按钮</button>   <div id="default">div内容</div>  <iframe src="Http://localhost:8800/child.html" frameborder="0" name='myframe' id='myframe'></iframe>  <script language="javascript" type="text/javascript">       window.addEventListener('message',function(e){          console.log(e.data);          if(e.data.msg==='hideselfService'){              document.getElementById('default').style.display = 'none';          }      });       document.getElementById('btn').onclick= function(){         var myframe = document.getElementById('myframe');         myframe.contentWindow.postMessage({data:'parent'},'http://localhost:8800');      }  </script></body></html>

child.html

  <!DOCTYPE html>    <html lang="en">    <head>        <meta charset="UTF-8">        <title>iframe子页面</title>    </head>    <body>        <h3>我是内嵌的子页面</h3>        <button id='btn'>子页面的按钮</button>        <script>             document.getElementById('btn').onclick= function(){                window.parent.postMessage({                    msg:"hideselfService"                },'*');            }            window.addEventListener('message', function(e){                console.log(e.data.data);            })        </script>    </body>    </html>

vue项目中postMessage的使用总结

postMessage简介

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

从广义上讲,一个窗口可以获得对另一个窗口的引用(比如 targetWindow = window.opener),然后在窗口上调用 targetWindow.postMessage() 方法分发一个 MessageEvent 消息。接收消息的窗口可以根据需要自由处理此事件 (en-US)。传递给 window.postMessage() 的参数(比如 message )将通过消息事件对象暴露给接收消息的窗口。
详情链接:postMessage

项目搭建

创建两个vue项目

  • 项目一:iframe-test-father;

  • 项目二:iframe-test-son

iframe-test-father 组件代码

<template>  <div id="nav">    <div>{{ childMsg }}</div>    <router-link to="/">Home</router-link> |    <router-link to="/about">About</router-link>    <button @click="handleClickFatherToSon">父传子</button>    <iframe      ref="iframeRef"      id="iframe"      src="http://localhost:8080/#/"      frameborder="0"    ></iframe>  </div>  <router-view /></template><script>export default {  data() {    return {      iframeWin: null,      childMsg: "",      count: 1,    };  },  mounted() {    // this.iframeWin = this.$refs.iframeRef.contentWindow;    // this.iframeWin = document.getElementById("iframe").contentWindow;    window.addEventListener("message", this.handleMessage);  },  methods: {    handleMessage(event) {      const data = event.data.data;     if (data) {        if (data.code == "success") {          // alert(data.test);          this.childMsg = data.test;        }      }    },    handleClickFatherToSon() {      this.count += 1;      document.getElementById("iframe").contentWindow.postMessage(        {          data: {            code: "success",            test: "我是父页面数据" + this.count,          },        },        "*"      );      // this.iframeWin.postMessage(      //   {      //     data: {      //       code: "success",      //       test: "我是父页面数据" + this.count,      //     },      //   },      //   "*"      // );    },  },};</script>

iframe-test-son组件代码

<template>  <div class="home">test1-home</div>  <div>{{ fatherMsg }}</div>  <button @click="handleClick">传递数据</button></template><script>export default {  name: "Home",  data() {    return {      fatherMsg: "",    };  },  mounted() {    window.addEventListener("message", this.handleClickMessage);  },  methods: {    handleClick() {      window.parent.postMessage(        {          data: {            code: "success",            test: "我是子页面数据",          },        },        "*"      );    },    handleClickMessage(event) {      if (event.data.type != "webpackOk") {        const data = event.data.data;        if (data.code == "success") {          this.fatherMsg = data.test;        }      }    },  },};</script>

效果图

Vue怎么使用postMessage实现父子跨域通信

感谢各位的阅读,以上就是“Vue怎么使用postMessage实现父子跨域通信”的内容了,经过本文的学习后,相信大家对Vue怎么使用postMessage实现父子跨域通信这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Vue怎么使用postMessage实现父子跨域通信

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

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

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

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

下载Word文档
猜你喜欢
  • 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
  • 使用postMessage怎么解决iframe跨域通信
    这篇文章将为大家详细讲解有关使用postMessage怎么解决iframe跨域通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先我们模拟场景,假设有两个不同源的页面,iframePage...
    99+
    2023-06-09
  • vue中iframe使用以及结合postMessage实现跨域通信
    目录使用场景需求iframe使用基本使用常用属性iframe高度自适应获取iframe的内容同域下获取父级/子级内容iframe跨域postMessage通信在vue中使用使用场景 ...
    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
  • html5怎么通过postMessage进行跨域通信
    本篇内容主要讲解“html5怎么通过postMessage进行跨域通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html5怎么通过postMessage进行...
    99+
    2024-04-02
  • 使用postMessage怎么实现iframe跨域
    今天就跟大家聊聊有关使用postMessage怎么实现iframe跨域,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。postMessage是什么此处引用MDN关于postMessag...
    99+
    2023-06-09
  • vue父子组件间通信怎么实现
    本篇内容介绍了“vue父子组件间通信怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.父组件传递数据给子组件父组件数据如何传递给子组...
    99+
    2023-07-04
  • vue中怎么实现父子组件间通信
    这篇文章将为大家详细讲解有关vue中怎么实现父子组件间通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。组件间通信($parent $refs)父组件要想获...
    99+
    2024-04-02
  • Vue 中怎么实现非父子组件通信
    这篇文章给大家介绍Vue 中怎么实现非父子组件通信,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Vue 官网介绍了非父子组件通信方法:不过官网说的太简单了,新手看完估计还是一脸懵逼。还...
    99+
    2024-04-02
  • Vue中怎么实现非父子组件通信
    这篇文章将为大家详细讲解有关Vue中怎么实现非父子组件通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。组件是Vue核心的一块内容,组件之间的通信也是很基本...
    99+
    2024-04-02
  • 如何在html5中使用postMessage解决跨域通信
    本篇文章给大家分享的是有关如何在html5中使用postMessage解决跨域通信,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。postmessage解析HTML5提供了新型机...
    99+
    2023-06-09
  • 如何用Vue实现父子组件通信
    目录一、父子组件的关系构成二、props三、$emit四、$parent五、总结 一、父子组件的关系构成 本篇文章将要总结的是Vue中父子组件之间的通信方式。 那在vue中父子组件之...
    99+
    2024-04-02
  • vue中怎样实现父子组件间通信
    今天就跟大家聊聊有关vue中怎样实现父子组件间通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。建两个组件father.vue和child.vue作...
    99+
    2024-04-02
  • 浅析Vue中父子组件间怎么通信(父传子|子传父)
    1、父组件传递给子组件⭐⭐父组件传递给子组件:通过props属性;【相关推荐:vuejs视频教程、web前端开发】子组件传递给父组件:通过$emit触发事件;  这里我们知道,父组件有一些数据需要子组件来进行展示,那我们可以通过props来...
    99+
    2022-11-22
    组件通信 组件 Vue
  • Vue父子组件之间事件通信怎么实现
    这篇“Vue父子组件之间事件通信怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue父子组件之间事件通信怎么实现”文...
    99+
    2023-07-05
  • Vue中iframe怎么结合window.postMessage实现跨域通信
    这篇文章主要介绍“Vue中iframe怎么结合window.postMessage实现跨域通信”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中iframe怎么结合window.postMess...
    99+
    2023-07-04
  • Vue怎么用父组件向子组件通信
    本文小编为大家详细介绍“Vue怎么用父组件向子组件通信”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么用父组件向子组件通信”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。props组件实例的作用域是孤立的...
    99+
    2023-07-04
  • vue中怎么利用v-model指令实现父子组件通信
    本篇文章给大家分享的是有关vue中怎么利用v-model指令实现父子组件通信,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。vue的双向数据绑定...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作