允许子iframe(跨站点)访问window.top

时间:2015-10-22 13:28:49

标签: javascript html iframe google-gadget

我正在尝试在iframe中显示一个网站。 iframe网址指向我公司内部托管的网络服务器,虽然我无法控制它,而且是“跨网站”#39;因为它有一个不同于我的网站的子域名。此外,代码由第三方公司维护,需要很长时间才能更改此...银行等! 内容的创建者表示无意阻止在iframe中显示/运行网站。

我们将使用Cisco Finesse来实现#34;各种第三方和本地开发的Web应用程序。 (背景,Finesse使用apache shindig来托管'小工具')。在技​​术层面,我希望将一个网址作为Finesse中显示的小工具,最终使用iframe来显示第三方网页。

到目前为止,问题是第三方页面上有一段代码试图访问window.top.location,当然还会引发安全异常。这是代码:

function someFunc() {
    var toppage = window.top;
    if (toppage.location.pathname.indexOf("default") == -1) {
       return toppage;
    }
    return toppage;
}

页面网址的格式为http://domain/default.aspx - 只是一个标准的aspx默认页面,老实说,我无法弄清楚为什么会以这种方式执行此检查。

调试了一下后,我发现代码在几个地方使用,但没有明显的原因。即。并不是真的需要首页,并且在我看来这是一些阻止"某些东西的尝试,但我不确定该网站的当前维护者是什么,也不是。

我在一个小型测试网站上尝试了相同的代码,只是为了查看行为。如果我主持一个网站"默认"在路径名(不是跨站点)中,该功能表现为预期的' (再一次,我不确定期望是什么)并且该函数返回' toppage'在孩子iframe内没有任何问题(切记不要跨站点)。

我在网络和堆栈溢出周围看了很多,到目前为止任何关闭需要对第三方网站进行一些更改(我不能),但我还没有找到完全相同的情况。我在这一点上确信我无能为力,但在这里要求大师们得到一些第二意见。

基本上我想知道是否有任何我可以做的,甚至是黑客攻击,以允许iframe访问window.top

1 个答案:

答案 0 :(得分:0)

iframe的父级位于其他域名上时,您无权访问。

尽管您可以通过其他方式解决此问题: http://madskristensen.net/post/iframe-cross-domain-javascript-calls

我们这样说:

  • 站点A位于 example.com sitea.example.com
  • 站点B位于 foobar.com

要执行此操作,您需要创建一个子域,例如 siteb.example.com 。然后将新的子域指向 foobar.com 的IP地址。现在,站点A和B位于 example.com 下。

然后将这行JavaScript添加到站点A和B:

document.domain = 'example.com'

这告诉浏览器网站A和B属于位于 example.com 的应用程序,因此可以使用JavaScript进行通信。可以通过调用window.parent.doSomething();现在Same Origin Policy原理在两个站点上都已启用。