2

我在域上有一个页面:

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

此页面http://www.anotherdomain.com有对http://sub.mydomain.com/somescript.js的脚本引用

这个 somescript 是一个类似于 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 之外的所有域进行测试,并使用主机参考。

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

4

1 回答 1

3

您无法通过跨域 iFrame 访问父窗口函数的方法。它违反了同源政策。http标X-Frame头响应告诉浏览器是否允许在 iFrame 中呈现页面,但对您的情况没有帮助。

我推荐的解决方案是用来window.postMessage()在两个框架之间进行通信。看看http://ejohn.org/blog/cross-window-messaging/

于 2012-11-09T17:43:24.000 回答