2013-02-21 4 views
1

는 동적으로 iframe을 크기를 조정하는 몇 가지 코드가 있습니다IE에서 동적 IFrame 크기가 작동하지 않습니까?

function autoResizeFrames() { 
    frames = document.getElementsByTagName("iFrame"); 
    window.setInterval("autoresize_frames()", 400); 
} 

function autoresize_frames() { 

    for (var i = 0; i < frames.length; ++i) { 
     if (frames[i].contentWindow.document.body) { 
      var frames_size = frames[i].contentWindow.document.body.offsetHeight; 
      if (document.all && !window.opera) { 
       frames_size = frames[i].contentWindow.document.body.scrollHeight; 
      } 
      frames[i].style.height = frames_size + 'px'; 
     } 
    } 
} 

이 기능은 파이어 폭스와 크롬에서 잘 작동을하지만, IE 10과 9는 모 효과가 있습니다. 여기

은 내가 IFrame을을 가지고있는 곳입니다

<div id="projectModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="projectModalLabel" 
      aria-hidden="true"> 
      <div class="modal-header"> 
        <button type="button" runat="server" onserverclick="btnClose_Click" class="close" aria-hidden="true"> 
        ×</button> 
       <h3 id="projectModalLabel">Edit Project</h3> 
      </div> 
      <div class="modal-body"> 
       <iframe src="" style="width: 100%; height: 200px; border: none;" frameborder="0" id="projectFrame" name="projectFrame" scrolling="no" allowtransparency="true"></iframe> 
      </div> 
      <div class="modal-footer"> 
         <button type="button" runat="server" onserverclick="btnClose_Click" class="btn" aria-hidden="true"> 
        Close</button> 
      </div> 
     </div> 

왜 IE를 제외한 모든 곳에서 작동합니까? 자바 스크립트가 어디에서나 작동한다고 생각 했나요?

감사

그것은 말한다 :

SCRIPT5007: Unable to get property 'document' of undefined or null reference 
kezcommon.js, line 62 character 5 

if (frames.contentWindow.document.body) { 
+0

IE가하는 일종의 XSS 예방일까요? –

+0

jsfiddle을 제공해 주시겠습니까? 또한 : 자바 스크립트 오류를 ​​보았습니까? –

+0

IE의 로그에서 오류를 게시했습니다 ... – user2043533

답변

1

콜백을 설정하는 대체 수단이 트릭을 수행하는 경우

window.setInterval(autoresize_frames, 400); 

그냥보고하십시오. setInterval()에 의해 호출되기 전에 autoresize_frames() 함수를 autoResizeFrames() 함수 위에 두어 메모리에 있는지 확인해야 할 수도 있습니다.

+1

모든 제안을 시도했습니다. 아직도 운이 없다. – user2043533

3

window.frames은 기본 DOM 컬렉션이며 동일한 이름의 노드 목록을 지정합니다. 어떻게 든 IE는 비슷하지 않은이 두 frames으로 엉망이됩니다.

autoresize_frames()

window.frames 아니라 콜렉션 ( autoResizeFrames()에서 정의 됨) frames 노드 목록을 사용하는 것 같다. 그러나이 컬렉션을 통해 iframe에 액세스 할 때 window.frames에는 iframe 내에 실제 window 개 개체가 포함되어 있기 때문에 IE에서는 또는 을 사용할 수 없습니다.

당신은 iframe에서 window 직선에 frames[i].document 또는 frames[i] 인 액세스해야합니다.

quickfix는 노드 목록에 frames 대신 다른 이름을 사용합니다.

+0

케이스에 케이스가있을 수도 있습니다. OP가 "iFrame"의 태그를 얻고 있습니다 ... 태그가 실제로