2010-06-12 3 views
1

이상한 문제가 있으며 Google에서 답변을 찾을 수 없습니다 ... 페이지에서 jquery로 iframe을 동적으로 작성하고 fullfil합니다. 그것은 withFF와 IE는 잘 작동하지만 은 Safari가 아니라입니다.동적으로 생성 된 iframe이 Safari에서 작동하지 않습니다.

iframe이 생성되었지만 비어 있습니다 ("인사말이 iframe에서!"메시지가 누락되었습니다). iframe이 사파리와 함께 빈칸 이유

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr" lang="fr-fr" > 
<head> 
    <title>iframe</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function() { 

    var jFrame = $('<iframe id="myiframe" name="myiframe">'); 
    jFrame.css({'height':'40px','width':'200px'}).appendTo($('#container')); 

    $('#myiframe').load(function() { 
    jFrame.contents().find("body").html('greetings from the iframe !'); 
    }); 

    }); 
    </script> 
</head> 
<body> 
    <div id="container"></div> 
</body> 
</html> 

난 정말 궁금해 : 다음은 코드의 조각을 설명하는 것입니다. "내용()"이 잘 해석되지 않은 것 같습니다 ...

아이디어가 있습니까?

답변

2

하면 load 이벤트 핸들러를 첨부해야합니다 전에 그것을 할 수있는이 같은 가능성이 화재 :

말했다되고 그건
$('<iframe id="myiframe" name="myiframe" />') 
    .css({'height':'40px','width':'200px'}) 
    .load(function() { 
    $(this).contents().find("body").html('greetings from the iframe !'); 
    }) 
    .appendTo('#container'); 

, 나는 load 이벤트가 발생했을 경우 화재 필요 입니다 긍정적 아니에요 없음 실제로드 (프레임에는 src이 없음), 모든 브라우저가 여기에있는 스펙을 따르지만 여전히 일치하지 않을 수 있습니다. 하지만 ... 사파리는 항상 loadready 이벤트로 조금 벗어났습니다. 따라서 위의 방법을 사용하면 가능한 한 많은 도움이됩니다. 한 마지막 메모, .appendTo() 직접 선택할 수 있습니다;)

+0

친애하는 닉, 고맙습니다, 그것은 잘 작동합니다! 저는 jQuery에 상당히 초보자입니다. 그리고 제 코드가 당신 것과 같이 작동하지 않는 이유를 솔직하게 이해하지 못합니다. 싱크로/비동기에 관한 것입니까? 다시 한번 감사드립니다. mhammout – user365351

+0

@mhammout -'load (...) '가 DOM에 삽입 될 때 즉시'load' 이벤트가 * 발생합니다. 실행하므로 해당 이벤트가 발생할 때 실행 핸들러를 조작 했더라도 이벤트가 이미 발생했습니다. –

+0

감사합니다! – user365351

관련 문제