前言:
HTML5 提出了一个新的用来跨域传值的方法,即postMessage,IE8也开始支持了。我们假设有两个网站,1.com 与 2.com,我在 1.com 的页面上通过 iframe 或 window.open 或超链接打开了一个 2.com 的网页,此时我要在 2.com 上做操作的时候,给 1.com 传值,让 1.com 有所变化。这个过程就是个跨域的过程。
比如,你的父页面有个函数叫 callback,然后你子页面本可以这样调用:window.opener.callback(),同域时能成功,跨域时就没有权限了。但是,此时你调用window.opener.postMessage(),却可以成功。

代码片段

父页面

子页面
这里需要注意一点的就是:postMessage语法 - window.postMessage(msg,targetOrigin),postMessage要通过 window 对象调用!因为这里的window不只是当前window,大部分使用postMessage的时候,都不是本页面的window,而是其他网页的window!如:
(1)iframe的contentWindow
(2)通过window.open方法打开的新窗口的window
(3)window.opener
(4)如果你使用postMessage时没有带window,那么当然,你就是用的本页面的window来调用了它。