如何使用来自其他域的脚本向父窗口发送消息?

时间:2014-01-11 22:58:20

标签: javascript messaging

我正在使用一行JavaScript代码构建一个可以植入您网站的服务 - 就像Facebook like button一样。

所以我正在向random.com添加代码,该代码是从mysite.com/js.js加载的。

如果用户没有登录,我不想让他们通过iframe登录以确保安全 - 我打开一个可以登录的窗口。当他们成功登录时,我需要父窗口来获取一个新的XSRF令牌。所以我需要能够告诉父窗口这样做。

我在iframe中使用此功能进行其他操作,但是当我尝试使用此代码的窗口时:

window.parent.postMessage('message', '*');

什么都没发生。如果我将*更改为random.com,我会收到此错误:

  

无法向http://random.com发送消息。收件人来源https://mysite.com

我认为必须这样,因为添加了监听器的脚本:

$(window).bind('message', myfunction);

它实际上是在mysite.com上的脚本中。

但奇怪的是,当一个iframe调用完全相同的脚本时,它完美地工作!并且iframe会将targetOrigin设置为random.com来调用它(这会导致上面的安全错误)。

1 个答案:

答案 0 :(得分:2)

window.parent仅适用于iframe,window.opener适用于单独的窗口。

最重要的是,因为我试图向父窗口发送消息,但新窗口由iframe IN窗口打开。

所以window.opener到达iframe - 然后我必须将消息实际发送给其父级:

window.opener.parent.postMessage(etc, etc);