2012-04-11 269 views
3

我知道这个get的问了很多,但是如何设置跨域iframe的动态高度,当我无法访问IFRAME显示的实际页面?跨域IFRAME调整大小

+0

javascript? http://stackoverflow.com/q/7651440 – hjpotter92 2012-04-11 12:32:46

+1

“我知道这个问题很多 - ”为什么你再问一次? – Quentin 2012-04-11 12:34:14

+0

因为即使尝试了常规解决方案之后,仍然存在一个问题,所以我期待着看看是否有人有任何独特的想法。 – 2012-04-11 12:37:41

回答

3

你不能。没有办法知道框架中文档的高度来自框架外部,因为all information about the document is protected来自第三方站点。

+0

我认为会是这样的情况,但是还有没有围绕它,即使计算维度? – 2012-04-11 13:18:51

+0

围绕它的唯一方法是需要其他域上的页面进行合作。由于它不在你的控制之下,它不会。 – Quentin 2012-04-11 13:21:00

+0

不需要。您需要另一端运行JS来发送跨域消息。 – Quentin 2012-04-11 14:04:19

0

如果你有机会获得两家母公司和iframe页面上添加JavaScript你可以添加这两种:

document.domain = 'mydomain.com'; 

这样你可以避免跨域限制,并能嗅出HIGHT改变iframe高度在父母页面

+0

谢谢,但我没有访问该页面。 – 2012-04-11 12:51:20

+0

“当我无法访问IFRAME显示的实际页面时”这是他的问题。 – Shoban 2012-04-11 12:58:37

+0

@Shoban - “你这么聪明” - 但只是试图帮助.....不是在同一个域名上不能统治我们的可能性,iframe内容的提供者不愿意帮忙。 ... – Steen 2012-04-11 13:52:52

0

有代理的页面,虽然自己的服务器(至少一次)

<?php 
$homepage = file_get_contents('http://www.megaupload.com'); 
echo $homepage; 
?> 
<script>etc</script> 
0

我是有这个问题太多,但我终于得到了一个解决方案:

将这个代码<head>内:

<script type="text/javascript"> 
    function resizeCrossDomainIframe(id, other_domain) { 
    var iframe = document.getElementById(id); 
    window.addEventListener('message', function(event) { 
     if (event.origin !== other_domain) return; // only accept messages from the specified domain 
     if (isNaN(event.data)) return; // only accept something which can be parsed as a number 
     var height = parseInt(event.data) + 0; // add some extra height to avoid scrollbar 
     iframe.height = height + "px"; 
    }, false); 
    }; 
</script> 

然后,使用这个代码的iframe:

<iframe src='http://www.example.com/my-iframe/' frameborder="0" id="my_iframe" onload="resizeCrossDomainIframe('my_iframe', 'http://www.example.com');">