iframe+postMessage不同源页面通信

摘要:
父页面父页面运行在8080端口,通过iframe标签引用子页面,通过postMessage发送消息给iframe中的子页面。--Add"scoped"attributetolimitCSStothiscomponentonly--˃子页面父页面运行在8081端口,通过监听message消息变化接收父页面中传递过来的参数,通过window.parent.postMessage发送消息给父页面。
父页面

父页面运行在8080端口,通过iframe标签引用子页面,通过postMessage发送消息给iframe中的子页面。

<template>
  <div class="hello">
    <iframe   src="http://10.10.30.5:8081"     height="100%"></iframe>
    <button @click="action()">发消息</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'parent'
    }
  },
  methods:{
    action(){
      this.show = true
      var iframe = document.getElementById('iframe');
      var data = {
          src:"parent",
          msg:"hello",
          serNo:Math.floor(Math.random() * (1000 - 1)) + 1
      };
      iframe.contentWindow.postMessage(JSON.stringify(data), '*');
    }
  },
  mounted() {
    window.addEventListener('message', function(e) {
        console.log('parent ---> ' + e.data);
    }, false);
  },
  created() {

  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

子页面

父页面运行在8081端口,通过监听message消息变化接收父页面中传递过来的参数,通过window.parent.postMessage发送消息给父页面。

<template>
  <div class="hello">
     <button @click="sendMessageToParent()">发送消息给父组件</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'sunyiwei'
    }
  },
  methods:{
    sendMessageToParent(){
      let data = {
        src:"child",
        msg:"hello",
        serNo:Math.floor(Math.random() * (1000 - 1)) + 1
      }

      window.parent.postMessage(JSON.stringify(data),'*');
    }
  },
  created() {
  },
  mounted() {
            window.addEventListener('message', function(e) {
              if(e.data == undefined){
                return
              }
              if (e.data) {
                console.log('child ---> ' + e.data)
              }
              var data = JSON.parse(e.data);

            }, false);
  }
}
</script>


<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
  .hello{
     100%;
    height: 500px;
    background-color: #fff;
  }
</style>

测试

iframe+postMessage不同源页面通信第1张

免责声明:文章转载自《iframe+postMessage不同源页面通信》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇通过SSE(Server-Send Event)实现服务器主动向浏览器端推送消息iOS 去除警告 看我就够了下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一个消息调度框架构建

基本框架 MDU(消息分发单元):包含一个消息处理任务,包含自身的消息队列,是一个消息调度的基本单位。 PID (功能子模块) :框架中用PID作为模块的划分,每个模块具有自己的PID编号,根据功能和调度需求可以安排多个PID到一个MDU中,PID是消息通信的一个基本单位,每个PID提供一个消息处理入口。 MQ (消息队列) :使用消息队列作为任务通信...

破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV

中国电信总是把好好的一个路由猫阉割过后放在我的E家套餐里到处兜售(垄断市场也就罢了,还有非常多霸王条款,比方必须使用它们的手机,同一时候最多多少台电脑上网等等),曾经破解过另外一个中国电信的路由猫,非常easy,是通过U盘恢复默认配置就能够了,中国电信我的E家有个套餐用的是华为HG522-C无线路由猫再加上IPTV,前段朋友(年龄一大把了)反映他的电...

NETCore Bootstrap Admin 通用后台管理权限 [2]: Blazor 版本介绍

前言 上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能。本篇文章带来的是微软最新出的 Blazor 版本的 NET Core 通用权限管理系统 Blazor 简介 至于 Blazor 是什么,Blazor 的优缺点小伙伴们可以自行在园子里搜索一下,相关介绍还是非常...

Apollo ROS原理(一)

一、背景介绍 为什么选择ROS 高效的开发支持 1、具有完整的包管理和工程结构 2、庞大的基础库 3、多语言接口支持 模块灵活配置 1、消息驱动的异步运行模型 2、抽象的P2P通信接口 3、自定义的消息格式 丰富的调试工具 1、具有可视化的调试工具 2、消息查看、存储、回放功能 二、 ROS概述 1、点对点 两个node进行消息通讯的时候是一个点对点的行...

使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)

上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试。 Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具。从Selenium 2.0开始Selenium就和WebDriver合体了。如果你还不了解Selenium怎么用,可以看看官网上的例子。Selenium支持各种语言的binding,方便起见,下面的测试...

WireX:Android智能手机组成的DDoS僵尸网络

阿里聚安全小编曾多次报道了官方应用市场出现恶意软件的事件,让大家在下载APP的时候三思而后行。 最近多家安全公司组成的安全研究小组发现了一个新的、传播广泛的僵尸网络,它是由成千上万的Android智能手机组成。 该僵尸网络名为WireX,被杀毒工具检测识别为“Android Clicker”,主要包括运行从谷歌Play商城下载的数百个恶意软件的Andro...