2011-09-02 4 views
2

비슷한 질문이 (해결되었지만) 동적으로 생성 된 iframe을 처리하지 못하는 것으로 보입니다.동적 iframe로드가 실행되지 않습니까?

기본적으로 jquery를 사용하여 임시 iframe을 만들어 (파일 경로에서 아약스 호출을 통해 제공) 파일을로드 한 다음 파일 다운로드 프롬프트를 엽니 다.

모든 것이 작동하지만 내 DOM이 파일이 다운로드되면 iframe을 제거하려는 iframe 묶음으로 채워지지 않게하려면.

내 iframe이 생성 코드 :

$('<iframe class="downloadIFrame" src="'+data['url']+'"></iframe>').appendTo('body'); 

그리고 코드 (이하 "준비"JQuery와 이벤트 콜백)을 파괴 :

$('.downloadIFrame').live('load', function() { alert('loaded');$(this).remove(); }); 

내가 iframe이 그 경고를하지 않습니다 로드되지 않았으므로 호출되지 않았습니다. 어떤 단서?

+0

경우 두 번째 코드가 위치한 시도? 첫 번째 코드 단편 앞이나 .ready eventHandler 외부에 있어야합니다. –

+0

iframe의 생성은 onclick 처리기에서 호출되는 .ready 외부의 함수에 있습니다. – Gazillion

답변

2

live은 이벤트 버블 링 메커니즘에서 작동하며, iframeload 이벤트는 사용자 작업이 트리거되지 않습니다. 따라서 live을 사용하여 iframe로드 이벤트를 처리 할 수 ​​없습니다.

iframe의 src을 설정하기 전에 iframeload 이벤트 처리기를 첨부해야합니다. 이는로드 이벤트가 연결되기 전에 iframe이로드되는 경우를 방지하기위한 것입니다.

$('<iframe class="downloadIFrame"></iframe>') 
.appendTo('body') 
.load(function(){ 
    $(this).remove(); 
}).attr("src", data['url']); 
+0

감사합니다. margusholland의 응답에서 언급했듯이 ifLoad에로드되는 파일 유형이 텍스트가 아니기 때문에 onLoad를 트리거하지 않는 이유가 있다고 생각합니다. 경고는 txt 또는 html 파일을 다운로드 할 때 팝업되지만 png는 실패합니다. 그림 게시판으로 돌아 가기 :) – Gazillion

+0

안녕하세요 - 저는 두 번째 성명서에 동의하지 않습니다. 이미지와 달리 iFrame은 DOM에 연결될 때만 호출됩니다. – michaeljiz

0

난 당신이 만든은 iframe의 DOM에 경고 코드를 넣어 시도 할 것 - 그것은 자신의 DOM을 가지고, 등 완전히 별도의 페이지로의

생각해 따라서 자신의 이벤트 계층 구조.

+2

iframe은 다운로드하려는 파일을 여는 데 사용됩니다 (파일은 외부 서버에서 제공되기 때문에). 기본적으로 iframe에는 웹 페이지가 없으므로 여기에 넣을 수 없습니다. – Gazillion

1

라이브 수신기를 사용하지 마십시오.

$('<iframe class="downloadIFrame" src="http://www.google.com/"></iframe>').appendTo('body'); 
$('.downloadIFrame').load(function() { alert('loaded');$(this).remove(); }); 

웹킷에서 저에게 잘 작동합니다.

+0

동적 인 방법으로 iframe을 생성했기 때문에 생겨야한다고 생각합니다. 그것은 여전히 ​​작동하지 않지만 응답 헤더가 text/html이 아니기 때문에 다른 것뿐만 아니라 그것을 추측하고 있어야한다고 생각합니다. pdfs 및 pngs 등을로드합니다. html이 아닌 파일을로드하려고하면 여전히 작동합니까? – Gazillion

관련 문제