同源策略限制了 窗口、 frame 之间的访问

  • 如果窗口是同源的,可以完全访问对方的内容。
  • 如果窗口不是同源的,无法访问对方的内容,但可以修改 location 属性(只能写入)。

postMessage

允许窗口之间相互通信,无论它们来自什么源

发送消息

将消息发送给 win 窗口:win.postMessage(data, targetOrigin)

接收消息

在目标窗口添加 message 事件监听器

window.addEventListener("message", function (event) {
  if (event.origin != 'xxx') {
    // 来自未知的源的内容,忽略它
    return
  }
  
  alert("received: " + event.data)
  
  // 可以使用 event.source.postMessage (...) 回发消息
})