2010-08-30 70 views
1

有什么办法可以“爆发”iframe吗?我的意思是人们会将我的JavaScript标签放在iframe中(有时它最终会嵌套iframe,但现在只需要处理ONE)。我试图收集某些信息,例如iframe位于页面上的位置。当你不在iframe中混合使用offsetLeft/offsetTop/innerHeight/innerWidth时,很容易做到这一点,但我知道你不能(或不应该)能够看到iframe之外的任何内容你在(假设不同的领域,它将是)。在iframe中访问使用javascript的父页面

有人对此有任何提示吗?或者至少有任何我可以研究的资源?尽管我最终希望能够访问原始页面的DOM,而在iframe中使用JS,但我知道这并不可行。现在我很乐意知道iframe在页面上的位置。我不知道如果这些信息是DOM,或者浏览器属性的一部分(我相信你仍然可以访问?)

谢谢!

+0

如果你想要某些信息(例如位置),那么你可以做出这样的要求,提供内容回您的客户。给他们举例说明如何调用你的内容(提供助手JS等)。并且您的页面可以使用信息或将错误内容返回给调用者。 – 2010-08-30 15:42:02

+0

是的,不幸的是,有时候我的标签会在很多人之间传递,添加到其他系统中,并在另一端吐出等等。所以我不能执行规则。 你能访问你最终页面的URL吗?即使你嵌套在一个或多个iframe中?或者这仍然违背安全政策... – Brad 2010-08-30 15:55:35

回答

3

简短的回答是否定的。

更长的答案是,与CORS和跨框架/域消息,你现在比以前更好。但是如果你尝试访问另一个域的父框架中的DOM,你会得到一个胖子“ACCESS DENIED”。

如果你在父母身上放置了一些可以载入像在你的服务器上设置cookie的图像的东西,那么是的。但我想这不是你的意思

这里是你如何能得到原点的例子 - 有你的iframe的用户加载这样的:

<script type="text/javascript"> 
    document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>'); 
    </script> 
+0

是的,这就是我害怕的。我现在将更多地研究跨框架/域消息传递,看看_might_能否帮助我,但我怀疑它。我遇到的最大问题是,我完全无法控制最终结果。所以会有不同的域,我不能添加任何额外的JS来加载图像/ cookies,什么都没有。 你能至少看到你最终在哪个域上?如果您使用的是一个或多个iframe,您是否可以访问/查看最终的网页? – Brad 2010-08-30 15:37:04

+0

如果父域名所有者没有在他的页面上添加额外的脚本,那么你现在AFAIK完全没有运气。 如果你可以让这个人添加一些片段,那么你可以做的东西。查看我的答案的例子 – mplungjan 2010-08-30 15:50:30

1

这不起作用交叉域。这是保持javascript在域之间工作的主要安全特性(它被称为同源策略)。

想象一下,你开始在一些邪恶的网站:www.evil.com。从那里,不知何故,他们诱使你点击一个链接,你期望带你到一个敏感的网站(贝宝,你的银行,无论)。尽管实际上并没有将您发送到该网站,但他们实际上已将其嵌入。您继续并登录。BAM。

如果他们的剧本已经获得了跨域iframe的DOM,他们可以很容易抽丝任何你通过日志传递形式的数据。讨厌,呃?这里还有没有办法安全地解决这个问题,所以它的关闭(不,可以说,JSONP)通过调用parent.Myfunction();

0

你总是可以实现父页面上的一些JavaScript函数,并从iframe中调用它们至于确定iframe的位置,我不确定那个。

0

虽然iFrame无法直接更改其父项,但父项可以从iFrame读取数据。

这意味着父HTML页面可以使用JS来查看子iFrame中的数据。

如果你控制了双方家长和iFrame内容的,那么你就可以设置消息从iFrame的父经过商定元素ID中的iFrame。

相关问题