我正在使用一行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
来调用它(这会导致上面的安全错误)。
答案 0 :(得分:2)
window.parent
仅适用于iframe,window.opener
适用于单独的窗口。
最重要的是,因为我试图向父窗口发送消息,但新窗口由iframe IN窗口打开。
所以window.opener
到达iframe - 然后我必须将消息实际发送给其父级:
window.opener.parent.postMessage(etc, etc);