iframe postMessage实现不同源通信

需求说明

B页面需要拿到A页面的信息,这两个页面在不同的域名下,使用localStorage不能跨域,所以采用iframe的postMessage实现不同源通信

// A页面

export default class Hot extends React.Component {
  handerClick() {
    window.frames[0].postMessage('主页面消息', '*');
  }
  render() {
    return (
      <div>
        <iframe src="http://localhost:8080/#/login" id="child" />
        <button onClick={() => { this.handerClick(); }} >click</button>
      </div>
    );
  }
}

// B页面

window.addEventListener('message', function (e) {
      console.log(e.data)  //e.data为传递过来的数据
      console.log(e.origin)  //e.origin为调用 postMessage 时消息发送方窗口的 origin(域名、协议和端口)
      console.log(e.source)  //e.source为对发送消息的窗口对象的引用,可以使用此来在具有不同origin的两个窗口之间建立双向通信
    })

可以看到打印出来的结果

注意:

  1. 一定是页面加载完成后在发送消息,否则会因为 iframe 未加载完成报错。
  2. 在react中即使是写在componentDidMount中也拿不到data

参考文献:

  1. https://blog.csdn.net/tang_yi_/article/details/79401280
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 元素会创建包含另外一个文档的内联框架(即行内框架); 一、align 属性(不赞成) align属性规定ifram...
    puxiaotaoc阅读 19,850评论 0 14
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 7,380评论 0 7
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,078评论 1 45
  • Section1、为什么要跨域? 自古以来(1995年起),为了用户的信息安全,浏览器就引入了同源策略。那么同源策...
    不去解释阅读 3,647评论 0 0
  • 浏览器安全的基石是”同源政策”(same-origin policy)。很多开发者都知道这一点,但了解得不全面。 ...
    强哥科技兴阅读 1,592评论 0 0