我正在尝试在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
?
答案 0 :(得分:0)
iframe
的父级位于其他域名上时,您无权访问。
尽管您可以通过其他方式解决此问题: http://madskristensen.net/post/iframe-cross-domain-javascript-calls
我们这样说:
要执行此操作,您需要创建一个子域,例如 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原理在两个站点上都已启用。