从Iframe调用父窗口方法(不同)

时间:2012-11-09 17:32:50

标签: javascript iframe same-origin-policy

我在域名上有一个页面:

http://main.mydomain.com/frame.cfm,其中包含iframe, 加载域http://www.anotherdomain.com

此页面http://www.anotherdomain.com包含对http://sub.mydomain.com/somescript.js

的脚本引用

此脚本是一个跟踪脚本,例如google Analytics,它会随www.anotherdomain.com的每个请求一起加载。

在某个阶段,页面www.anotherdomain.com中的脚本http://sub.mydomain.com/somescript.js会尝试拨打window.top.aFunction(); or parent.aFunction();

让父窗口做一些事情。

我知道X-Frame-Options和Access-Control-Allow-Origin标题并尝试了两者,但是当我在www.anotherdomain.com上浏览我的iframe时,我在Firebug中收到一条错误消息告诉我:

Error: Permission denied to access property 'relocate'window.top.aFunction();

在main.domain网站上的web.config中,我有以下规则:

<httpProtocol>
     <customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://sub.mydomain.com" />
        <add name="X-Frame-Options" value="ALLOW-FROM http://sub.mydomain.com" />
     </customHeaders>
</httpProtocol>

我认为应该授予sub.mydomain.com访问main.mydomain.com上的脚本。

我正在测试这个域名除了本地电脑上的www.anotherdomain.com以外的所有域名,并附有主机参考。

知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:3)

您无法通过跨域iFrame访问父窗口函数的方法。它与Same Origin Policy相反。 X-Frame http标头响应告诉浏览器是否允许在iFrame中呈现页面并且对您的情况没有帮助。

我建议的解决方案是使用window.postMessage()在两个帧之间进行通信。看http://ejohn.org/blog/cross-window-messaging/