我在域名上有一个页面:
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以外的所有域名,并附有主机参考。
知道我在这里缺少什么吗?
答案 0 :(得分:3)
您无法通过跨域iFrame访问父窗口函数的方法。它与Same Origin Policy相反。 X-Frame
http标头响应告诉浏览器是否允许在iFrame中呈现页面并且对您的情况没有帮助。
我建议的解决方案是使用window.postMessage()
在两个帧之间进行通信。看http://ejohn.org/blog/cross-window-messaging/