h5跨域信息传递—postMessage
通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。postMessage的使用分为发送方和接收方。
发送方
otherWindow.postMessage(message, targetOrigin, [transfer]);
otherWindow
:是接收方的window对象。是其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。
message
:将要发送到其他 window的数据。它将会被结构化克隆算法序列化。这意味着你可以不受什么限制的将数据对象安全的传送给目标窗口而无需自己序列化。
targetOrigin
:通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是字符串*(表示无限制)或者一个URI。在发送消息的时候,如果目标窗口的协议、主机地址或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。
transfer
:是一串和message 同时传递的 Transferable 对象。 这些对象的所有权将被转移给消息的接收方,