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

Allow a child iframe (cross site) access to window.top

本文关键字:访问 window top 站点 iframe      更新时间:2023-09-26

我试图在iframe中显示一个网站。iframe url指向我公司内部托管的web服务器,尽管我无法控制它,并且是"跨站点",因为它具有与我网站不同的子域。此外,代码是由第三方公司维护的,需要很长时间才能对其进行更改……银行之类的!内容的创建者已经声明,无意阻止在iframe中显示/运行网站。

我们将使用Cisco Finesse来"汇集"各种第三方和本地开发的web应用程序。(后台,Finesse使用apache shinging来托管"小工具")。在技术层面上,我希望在Finesse中显示一个url作为小工具,它最终使用iframe来显示第三方页面。

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

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

页面url的形式,http://domain/default.aspx -只是一个标准的aspx默认页面,老实说,我不明白为什么这个检查正在以这种方式执行。

稍微调试后,我发现代码在几个地方使用,但没有明显的原因。ie。不需要真正的首页,在我看来,这是一些试图阻止"什么",但我不确定是什么,也不确定当前的维护者的网站。

我在一个小测试站点尝试了相同的代码,只是为了看到行为。如果我在路径名(不是跨站点)中托管一个带有"default"的站点,那么该函数的行为"如预期"(再次,我不确定期望是什么),并且该函数返回"toppage",从子iframe内没有问题(请记住不要跨站点)。

我在net和stackoverflow周围看了很多,到目前为止,任何接近的东西都需要对第三方网站进行一些更改(我不能),但我也没有发现完全相同的情况。在这一点上,我很确定我无能为力,但在这里请大师们得到一些第二意见。

基本上我想知道是否有什么我能做的,甚至是一个黑客,允许iframe访问window.top ?

iframe在不同的域名上时,您无法访问它的父级

虽然你可以用另一种方式解决这个问题:http://madskristensen.net/post/iframe-cross-domain-javascript-calls

假设:

  • 站点A位于example.comsitea.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();,现在同源策略原则已在两个站点上启用。