2010-10-30 28 views
9

我必须在页面的iframe中包含一个外部白标签网站。外部网站上有很多页面,它们的高度差别很大。使用外部URL获取iframe的高度

我需要调整我的iframe的高度以适应此情况。

我可以获取加载到iframe中的第一页的高度(使用PHP),但没有办法获取后续页面高度,因为没有办法知道url /位置在iframe中发生了什么变化。

由于这是iframe中的外部URL,因此通常存在安全限制,因此所有解决方案都必须来自父框架。解决方案必须至少在FF和IE上可行。

唯一能想到的是测试滚动条是否在iframe中可见,但在这些情况下这似乎是不可能的。

如果任何人都可以证明我错了,或者有任何其他javascript/ajax/php跨浏览器解决方案,我很乐意听到它。

+0

看到这个问题:http://stackoverflow.com/questions/466672/set-iframe-to-height-of-content-for-remote-content – Zach 2010-11-01 21:40:32

+0

是的,我看到了这个问题。但是我在这里强调说“所有的解决方案都必须来自父框架”。我见过的大部分建议都涉及远程页面上的某种编码。 – Owen 2010-11-02 13:10:56

回答

8

它是不可能这样做是因为浏览器的安全模式。如果可能的话,这将是一个安全问题,必须修复。

尽管让嵌入网站在嵌入页面时知道第三方网页的高度似乎是无害的,但这可能会泄露信息到浏览器用户想要保密的嵌入网站。例如,http://www.facebook.com/根据您是否登录而呈现不同的情况,因此如果我的网站可以计算出<iframe src="http://www.facebook.com/">的高度,那么我可以计算出您是否是Facebook用户,您可能不希望我知道。

信息泄露将类似于臭名昭着的CSS History Leak,因为它会通过“链接”到该网站来揭示用户与第三方网站的关系信息(在这种情况下,使用iframe而不是链接) 。浏览器供应商不得不插入CSS历史泄漏,所以我怀疑如果你能够在任何浏览器中在iframe中渲染第三方站点的高度,那么供应商也必须解决这个问题。

泄漏的信息可以是任何可以从用户使用其cookie(即使在不同域的页面内的iframe中呈现时将发送该浏览器发送)呈现给用户的页面高度的任何事物。具体风险完全取决于嵌入式网站遭到“攻击”的性质。例如。我可以通过获取https://stackoverflow.com/reputation的高度来了解有人访问我的网站时有多少计算器活动,这对于不同的用户而言是不同的。

+0

嗯..我和5亿其他人;-)你所拥有的只是匿名信息,即某人已登录。 – Owen 2010-11-04 10:05:06

+3

不完全。我知道您,查看我网页的人已登录。使我有机会更好地针对您的网上钓鱼攻击。我可以秘密计算出你使用的37个不同银行网站中的哪一个,而不是脸书。请注意,泄露的信息与CSS历史泄漏相似,这引起了相当大的争议并得到修复,请参阅http://blog.mozilla.com/security/2010/03/31/plugging-the-css-history-泄漏/如果你不熟悉那个。 – Day 2010-11-04 15:56:08

+0

正在控制父框架,您已经知道加载到iframe中的第一个url(Facebook或银行)。没有秘密在那里开始。这与CSS历史泄漏(感谢链接)不同,但与知道用于退出站点的超链接相比更具可比性。您可能会得到的唯一“额外”是用户在远程站点上有一个登录名,这对您来说并不令人惊奇,因为他们正在使用您提供给iframe的url。换句话说,无论如何,这些信息都是一个合理的猜测。 – Owen 2010-11-06 13:41:30