当前位置: 首页 > Web前端 > HTML

窗口间通信方案—postMessage

时间:2023-03-28 17:06:51 HTML

postMessage是html5引入的一个API。postMessage方法允许来自不同来源的脚本以异步方式进行通信。其实同源不同页面的脚本也可以使用postMessage方法进行通信。简介发送数据需要在接收数据窗口的全局对象下调用该方法。targetWindow.postMessage(message,targetOrigin,[transfer])targetWindow:目标窗口的全局对象引用,例如iframe的contentWindow属性,执行window.open返回的window对象,或者命名或数字索引的window.frames.message:要发送给目标窗口的数据,可以是任何类型的数据。它将被结构化克隆算法序列化。这意味着您可以安全地将数据对象无限制地传输到目标窗口,而无需自己序列化它们。targetOrigin:指定目标窗口的原点。只有当目标窗口的原点对应于targetOrigin时,目标窗口才能接收到数据。*:表示可以将数据发送到任何源窗口,但出于安全原因通常不建议这样做。/:表示可以发送到当前窗口的同源窗口。transfer:可选,它是一串Transferable对象,随消息一起传递。这些对象的所有权将转移给消息的接收者,而发送者将不再保留所有权。接收数据接收数据的窗口监听窗口对象的消息事件,从事件对象中获取相关数据。window.addEventListener('message',(event)=>{const{data,origin,source}=event/*somecode*/})data:从其他窗口传过来的数据。origin:发送窗口的起点,由“协议”、“://”、“域名”、“:端口号”组成的字符串。source:对发送消息的窗口对象的引用,这可用于在两个不同来源的窗口之间建立双向通信。安全发送数据的窗口,需要指定确切的目标窗口原点而不是*。接收数据的窗口需要通过event.origin判断发送数据的窗口的身份。两个窗口之间的实例通信