Iframe 콘텐츠가로드 된시기 감지 (크로스 브라우저)
iframe과 해당 콘텐츠가로드되었지만 운이 좋지 않은시기를 감지하려고합니다. 내 응용 프로그램은 상위 창의 텍스트 필드에 일부 입력을 받아 iframe을 업데이트하여 '실시간 미리보기'를 제공합니다.
iframe로드 이벤트가 발생하는시기를 감지하기 위해 다음 코드 (YUI)로 시작했습니다.
$E.on('preview-pane', 'load', function(){
previewBody = $('preview-pane').contentWindow.document.getElementsByTagName('body')[0];
}
'preview-pane'은 내 iframe의 ID이며 YUI를 사용하여 이벤트 핸들러를 연결하고 있습니다. 그러나 내 콜백에서 본문에 액세스하려는 시도 (iframe로드시)가 실패합니다. 이벤트 핸들러가 준비되기 전에 iframe이로드되기 때문이라고 생각합니다. 이 코드는 iframe을 생성하는 PHP 스크립트를 절전 모드로 만들어 iframe 로딩을 지연 시키면 작동합니다.
기본적으로 iframe이로드되고 문서가 준비 될 때를 감지하기 위해 브라우저에서 올바른 접근 방식이 무엇인지 묻습니다.
iframe이로드되고 문서가 준비된시기를 감지하려면?
iframe이 프레임 내부의 스크립트에서 자신을 알 수 있다면 이상적입니다. 예를 들어 부모 함수를 직접 호출하여 준비되었음을 알릴 수 있습니다. 예상치 못한 순서로 일이 발생할 수 있으므로 프레임 간 코드 실행에는 항상주의가 필요합니다. 또 다른 대안은 'var isready = true;'를 설정하는 것입니다. 자체 범위에서 부모 스크립트가 'contentWindow.isready'에 대해 스니핑하도록합니다 (그렇지 않으면 onload 핸들러를 추가합니다).
어떤 이유로 iframe 문서가 협력하는 것이 실용적이지 않다면 기존의로드-레이스 문제, 즉 요소가 서로 바로 옆에 있더라도 다음과 같은 문제가 있습니다.
<img id="x" ... />
<script type="text/javascript">
document.getElementById('x').onload= function() {
...
};
</script>
스크립트가 실행될 때 항목이 이미로드되지 않았다는 보장은 없습니다.
로드 레이스에서 벗어나는 방법은 다음과 같습니다.
IE에서는 'readyState'속성을 사용하여 이미로드되었는지 확인할 수 있습니다.
JavaScript가 활성화 된 상태에서만 항목을 사용할 수있는 경우 소스를 설정하고 페이지에 추가하기 전에 'onload'이벤트 기능을 설정하여 동적으로 생성 할 수 있습니다. 이 경우 콜백이 설정되기 전에로드 할 수 없습니다.
마크 업에 포함하는 구식 방식 :
<img onload="callback(this)" ... />
HTML의 인라인 'onsomething'핸들러는 거의 항상 잘못된 것이며 피해야합니다. 그러나이 경우에는 때때로 가장 나쁜 옵션입니다.
이 블로그 게시물을 참조하십시오 . jQuery를 사용하지만 사용하지 않더라도 도움이 될 것입니다.
기본적으로 이것을 당신의 document.ready()
$('iframe').load(function() {
RunAfterIFrameLoaded();
});
React를 사용하는 경우 동일 출처 iframe로드 이벤트를 감지하는 것은 onLoad
iframe 요소에 이벤트 리스너를 설정하는 것만 큼 간단합니다 .
<iframe src={'path-to-iframe-source'} onLoad={this.loadListener} frameBorder={0} />
For anyone using Ember, this should work as expected:
<iframe onLoad={{action 'actionName'}} frameborder='0' src={{iframeSrc}} />
참고URL : https://stackoverflow.com/questions/751435/detecting-when-iframe-content-has-loaded-cross-browser
'program story' 카테고리의 다른 글
자바 스크립트 변수 정의 : 쉼표 대 세미콜론 (0) | 2020.09.22 |
---|---|
std :: system_clock과 std :: steady_clock의 차이점은 무엇입니까? (0) | 2020.09.22 |
공식 JavaScript 참조가없는 이유는 무엇입니까? (0) | 2020.09.22 |
Actionscript 3을 사용하여 ByteArray 언로드 (0) | 2020.09.22 |
C ++에 기본 클래스가없는 이유는 무엇입니까? (0) | 2020.09.21 |