同源策略限制了 窗口、 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 (...) 回发消息
})