Vue嵌入iframe,两个工程间的通信

前言

开发中可能会碰到这种情况:当前工程需要嵌入另一个工程的页面,此时两个工程间的通信可能就会碰到js跨域的问题。这里记录一下我的解决方法。

关键

  1. 使用postMessage发送消息
  2. 使用addEventListener监听发送过来的消息

实现

父页面代码:

<template>
  <div>
    <div class="box">
      <span>当前页接收的iframe信息:</span>
      <span style="color:red;">{{receive}}</span>
    </div>
    <div class="box">
      <el-input placeholder="输入内容向iframe发送" v-model="msg.content" style="width:180px;"></el-input>
      <el-button @click="Send">发送</el-button>
    </div>
    <div style="height:500px">
      <iframe
        :src="url"
        ref="iframe"
        style="height: 100%;width:100%; frameborder=no"
        frameborder="no"
        border="0"
        marginwidth="0"
        marginheight="0"
      ></iframe>
    </div>
  </div>
</template>
<script>
export default {
  mounted() {
    window.addEventListener("message", event => {
      this.receive = event.data.content;
    });
  },
  data() {
    return {
      url: "http://192.168.1.194:8080/child",
      receive: "",
      msg: { content: "" }
    };
  },
  methods: {
    Send() {
      this.$refs.iframe.contentWindow.postMessage(this.msg, "*");
    }
  }
};
</script>

iframe页面代码:

<template>
  <div>
    <div class="box">
      <span>iframe接收的信息:</span>
      <span style="color:red;">{{receive}}</span>
    </div>
    <div class="box">
      <el-input placeholder="输入内容向父页面发送" v-model="msg.content" style="width:180px;"></el-input>
      <el-button @click="Send">发送</el-button>
    </div>
  </div>
</template>
<script>
export default {
  mounted() {
    window.addEventListener("message", event => {
      debugger;
      this.receive = event.data.content;
    });
  },
  data() {
    return {
      receive: "",
      msg: { content: "" }
    };
  },
  methods: {
    Send() {
      window.parent.postMessage(this.msg, "*");
    }
  }
};
</script>

页面效果:
在这里插入图片描述
如果addEventListener多次被调用,可以试试下面这种方法

window.onmessage = function (event) {}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值