2016-04-23 11 views
3

Ich habe Insert content into iFrame und ihre Geige bei http://jsfiddle.net/8VP4y/3/ betrachtet, um mit den folgenden Codes herauszukommen, die ich Problem habe.Innerhalb Append anhängen, Iframe innerhalb Append in Jquery

ich habe eine jsfiddle für mein Problem unten erstellt.

https://jsfiddle.net/cy87j70t/2/

$(document).ready(function() { 

     $('#card2').html('<iframe id="myFrame"></iframe>'); 

     var myFrame = $("#myFrame").contents().find('body'); 
     var myFrame2 = $("#myFrame2").contents().find('body'); 

     myFrame.append('<p>OH NO TOKEN IS FOR myFrame Original '); 
     myFrame2.append('<p>OH NO TOKEN IS FOR myFrame 2 '); 

    }); 

und die HTML sieht wie folgt aus;

<div id='card2'> 

</div> 
<iframe id='myFrame2'> 

</iframe> 

Ich versuche, einen Iframe mit Javascript zu erstellen, dann zum iframe mit Schreiben von Inhalten aus JSONP (ich habe diesen Teil für eine einfache Debug weggelassen);

Ich bin mir nicht sicher, warum es nicht in den Iframe schreibt, ist es, weil der Iframe von Javascript erstellt wird?

Ich habe versucht, Anfügen, html, nach, prepend aber nichts scheint mir zu erlauben, mit dem iframe

+1

Also, was das Problem ist, Geige scheint wie erwartet zu funktionieren. – dfsq

+0

Es wird in myFrame2 gedruckt, das in HTML erstellt wird, aber nicht in myFrame, das mit Javascript erstellt wurde. –

+0

In Ihrer Demo druckt es in beiden iframes richtig. – dfsq

Antwort

1

Nein, es ist kein Fehler zu schreiben.

Updated jsfiddle

Der richtige Weg ist:

$(function() { 
    $('#card2').html('<iframe id="myFrame"></iframe>'); 

    // add the src attribute so that the load event will take place in every browser.. 
    $("#myFrame").attr('src', 'about:blank'); 

    // wait for the iframe is loaded 
    $("#myFrame").on('load', function(e) { 
    var myFrame = $("#myFrame").contents().find('body'); 
    myFrame.append('<p>11111111OH NO TOKEN IS FOR myFrame Original</p>'); 
    }); 



    var myFrame2 = $("#myFrame2").contents().find('body'); 
    myFrame2.append('<p>2222222222 OH NO TOKEN IS FOR myFrame 2</p>'); 
}); 
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script> 

<div id='card2'> 

</div> 
<iframe id='myFrame2'> 

</iframe> 
+0

Vielen Dank, ich glaube, der Rahmen Onload hat den Trick für Firefox. aber es ist lustig, wenn Sie ** $ ("# myFrame") entfernen. Attr ('src', 'über: leer'); ** es funktioniert nicht mehr auf Safari aber funktioniert auf firefox aber es hat gut funktioniert ohne src auf Safari auf meiner ursprünglichen Geige –

+0

@DaveTeu Das Problem ist: iframe ist ein Container, also, wenn Sie die SRC attr gesetzt die Ereignisladung ausgelöst wird, und Sie können fortfahren. Ich habe es auf Win 8.1 getestet mit: ie11, FF & Chrome letzte Version. – gaetanoM

+1

Vielen Dank. Nachdem ich die Logik verstanden hatte, fand ich $ ('# myFrame') [0] .contentWindow.location.reload (true); funktioniert auch, wenn ich das nicht will: blank in meinen Codes. 6 Stunden auf diesem Bug Zzz danke und raus. –