2011-11-22 7 views
6

페이스 북, 트위터 등에서 src와 iframe (크로스 도메인)을 가지고 있습니다. iframe의 높이를 알아야하지만 문제가 발생했습니다 : "속성 '문서'에 액세스 할 수있는 권한이 거부되었습니다." 이 문제를 해결하도록 도와주세요. 많은 감사합니다!iframe 크로스 도메인의 높이를 얻는 방법

답변

6

몇 가지 문제가 있습니다. 첫째, iframe의 높이가 원하는 것과 다를 가능성이 있습니다. 즉, 사용자가 제어하는 ​​페이지의 HTML 코드에 명시 적으로 설정되어 있으며 자바 스크립트를 통해 쉽게 액세스하고 수정할 수 있다는 의미입니다. 너가 후에 보는 무엇이 안쪽에 안쪽에 페이지의 고도이다. 그렇다면 간단한 답은 페이스 북/트위터 같은 외부 서비스가 아니라는 것입니다.

두 가지 문서의 자바 스크립트 에 통신 경로가 내장되어 있지 않으면 보안상의 이유로 인해 부모님과 자녀가 아닌 메시지를 전달할 수 있습니다. 최신 브라우저에서 이것을 처리하기위한 프로토콜은 postMessage입니다. https://developer.mozilla.org/en/DOM/window.postMessage. 하지만이 경우에는 의사 소통중인 문서가 들어오는 postMessage를 처리하도록 설정되어 있지 않으면이 경우 전혀 쓸모가 없습니다. 트위터/페이스 북은 자주 알지 못합니다.

부모 문서가 다른 도메인의 어린이와 자유롭게 통신 할 수있는 경우 자바 스크립트는 로그인 한 모든 사이트에서 일련의 명령을 효과적으로 실행할 수 있습니다. 그것의 보안 함의는 무섭고 다행히도 가능하지 않습니다.

1

크로스 도메인 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> 
관련 문제