2011-11-22 127 views
6

我有iframe(跨域)从Facebook,Twitter或其他等src我需要获得高度的iframe,但我得到了问题:“权限被拒绝访问属性'文件'”。请帮我解决这个问题。非常感谢!如何获得iframe跨域的高度

回答

6

夫妇问题。首先,iframe的高度可能不是你想要的。我的意思是,它明确设置在您控制的页面的HTML代码中,并且可以通过任何Javascript方式轻松访问和修改。看起来你是在的页面高度 iframe。如果是这样,简单的答案是你不能,至少不能像Facebook/Twitter这样的外部服务。

由于安全原因,人们可以轻松地将消息从孩子传递给父母,但不会从父母传递给孩子,除非在您的javascript 中的文档中已内置通信路径。在现代浏览器中有一个postMessage协议来处理这个问题。 https://developer.mozilla.org/en/DOM/window.postMessage。但是,在这种情况下,这完全没有用处,除非你正在与之通信的文档被设置为处理传入的postMessage,而据我所知,Twitter/Facebook通常不会。

如果父母文档可以与来自不同域的孩子自由沟通,那么任何 JavaScript都可以在您登录的任何网站上有效执行任何系列命令。这是可怕的安全含义,幸好不可能。

1

javascript中没有选项可以找到跨域iframe高度的高度,但是可以在某些服务器端编程的帮助下完成此类操作。我在这个例子中使用了PHP

<?php 
$output = file_get_contents('http://yourdomain.com'); 
?> 
<div id='iframediv'> 
    <?php echo $output; ?> 
</div> 

<iframe style='display:none' id='iframe' src="http://yourdomain.com" width="100%" marginwidth="0" height="100%" marginheight="0" align="top" scrolling="auto" frameborder="0" hspace="0" vspace="0"> </iframe> 

<script> 
if(window.attachEvent) { 
    window.attachEvent('onload', iframeResizer); 
} else { 
    if(window.onload) { 
     var curronload = window.onload; 
     var newonload = function(evt) { 
      curronload(evt); 
      iframeResizer(evt); 
     }; 
     window.onload = newonload; 
    } else { 
     window.onload = iframeResizer; 
    } 
} 
    function iframeResizer(){ 
     var result = document.getElementById("iframediv").offsetHeight; 

     document.getElementById("iframe").style.height = result; 
     document.getElementById("iframediv").style.display = 'none'; 
     document.getElementById("iframe").style.display = 'inline'; 
    } 
</script>