postMessage 是 html5 引入的API,postMessage()方法允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档、多窗口、跨域消息传递,多用于窗口间数据通信,这也使它成为跨域通信的一种有效的解决方案。

一、Window postMessage() 方法介绍

postMessage() 方法用于安全地实现跨源通信。(只有同源脚本才能相互通信,window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。)

1、语法:otherWindow.postMessage(message, targetOrigin, [transfer]);

(1)otherWindow:其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。

(2)message:将要发送到其他 window的数据。它将会被结构化克隆算法序列化。这意味着你可以不受什么限制的将数据对象安全的传送给目标窗口而无需自己序列化。

(3)targetOrigin:通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是字符串"*"(表示无限制)或者一个URI。

在发送消息的时候,如果目标窗口的协议、主机地址或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;

只有三者完全匹配,消息才会被发送。

这个机制用来控制消息可以发送到哪些窗口;例如,当用postMessage传送密码时,这个参数就显得尤为重要,必须保证它的值与这条包含密码的信息的预期接受者的origin属性完全一致,来防止密码被恶意的第三方截获。

如果你明确的知道消息应该发送到哪个窗口,那么请始终提供一个有确切值的targetOrigin,而不是*。不提供确切的目标将导致数据泄露到任何对数据感兴趣的恶意站点。

(4)transfer可选:是一串和message 同时传递的 Transferable 对象,这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。

2、接收数据:监听message事件的发生


// 执行如下代码, 其他window可以监听分发的message:
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {var origin = event.originif (origin !== "http://example.org:8080") return;// ...
}

message 的属性有:

(1)data:从其他 window 中传递过来的对象。

(2)origin:调用 postMessage 时消息发送方窗口的 origin。

这个字符串由 协议、“

浅析 postMessage 方法介绍、如何接收数据(监听message事件及其属性介绍)、使用postMessage的安全注意事项、具体使用方式(父子页面如何互发消息、接收消息)相关推荐

  1. 你值得拥有!更省钱地完成数据监听

    作者 | 梁唐 来源 | TechFlow(ID:techflow2019) 大家好,今天一起来了解一个新的设计模式--观察者模式. 观察者模式的思路很简单,它被广泛地应用在各种数据监控上. 很多时候 ...

  2. Python黑客编程基础3网络数据监听和过滤

    Python黑客编程3网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7. ...

  3. Python黑客编程3网络数据监听和过滤

    课程的实验环境以下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      触及到的主要python ...

  4. 我的Vu啊(vue 2.0,数据监听,计算属性,组件传参)

    提示:个人Vue学习工作总结  (持续更新中如果有不对的地方还请前辈多多指点) 文章目录 vue 计算属性 computed vue  数据监听 wacth 提示:以下是本篇文章正文内容,下面案例可供 ...

  5. Object.defineProperty与双向绑定、数据监听

    一.对象赋值的两种方式 一是"="赋值,一是Object.defineProperty方法,而当下流行框架中广泛应用的双向绑定和数据监听等,就是利用的第二种方式,关于此方法不多讲, ...

  6. java bean 监听_事件监听器?将JavaBeans接通起来的方法

    摘 要 JavaBeans 通 过 事 件( 封 装 着 与 所 发 生 情 况 有 关 的 数 据 的 对 象) 与 其 它 软 件 组 件 进 行 通 讯. 本 文 将 向 你 展 示 如 何 利 ...

  7. vue笔记(二)Vue-class与style、事件、计算属性、数据监听、指令+自定义指令、过滤器

    vue官网 一 .class.style操作 二.事件 三.计算属性 四.数据监听.观测 五.指令+自定义指令 六.过滤器 一 .class.style操作 官网 1. class使用: (1)v-b ...

  8. vue,watch监听数据,数据监听

    vue,watch监听数据,数据监听 三个值: 1.第一个handler:其值是一个回调函数.即监听到变化时应该执行的函数. 2.第二个是deep:其值是true或false:确认是否深入监听.(一般 ...

  9. Web3j通过合约地址监听transfer事件获取以太坊交易数据

    Web3j通过合约地址监听transfer事件获取以太坊交易数据 We3j web3j是一个轻量级的Java库,用于在Ethereum网络上集成客户端(节点). 核心特性 通过Java类型的JSON- ...

最新文章

  1. 【React深入】深入分析虚拟DOM的渲染原理和特性
  2. SDL 1.2.14在windows平台下的编译及例子
  3. Lua字符串及模式匹配
  4. 数据库系统中事务的ACID原则
  5. 苹果电脑 默认安装jdk位置_CH01_JDK安装和配置(含macOS)
  6. 转iOS逆向工程:Reveal查看任意app的高级技巧!
  7. Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名
  8. 普乐郡——回乐县(城市记忆7)
  9. 批量添加文件名前后缀的工具_艾孜尔江撰
  10. Unity笔记之动画遮罩
  11. 二零零九年经典雷人语录总汇四百零五条[转的]
  12. golang常用库之-mgo.v2包、MongoDB官方go-mongo-driver包、七牛Qmgo包 | go操作mongodb、mongodb bson
  13. 免费临时网页邮箱(可丢弃式邮箱)
  14. 阿里负责人揭秘面试潜规则
  15. Windows程序设计 读书笔记(3)
  16. Visual Studio 2010 sp1介绍与下载
  17. 塞尔达 amiibo_极客历史的本周:塞尔达(Zelda)25岁,印刷机的诞生,以及ENIAC的揭幕...
  18. 巨坑 ----》git 提交之殇
  19. php 可以编辑treegrid,TreeGrid(树形表格)
  20. 对图像用函数imfill填充孔洞时,图像边界上的孔洞未被填充,试完成这些孔洞的填充。

热门文章

  1. 阿里P5-MVC知识
  2. 引水工程 Kruskal + Prim
  3. buff系统 游戏中_游戏策划如何设计一个好用的BUFF系统!
  4. 企业级发卡网源码下载带代理系统授权搭建教程
  5. f803配置_中兴F803ONU
  6. 消除计算机上的静电有哪些方法,电脑静电如何消除详解【图文介绍】
  7. kali下载地址和安装方法
  8. 郑强教授相关语录(转)
  9. ubuntu 安装confluence
  10. TCP滑动窗口机制(重要)