2016-04-23 75 views
3

我看過 Insert content into iFrame和他們的小提琴在http://jsfiddle.net/8VP4y/3/出來以下代碼,我有問題。附加在追加內,Iframe附加在Jquery

我在下面爲我的問題創建了一個jsfiddle。

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 '); 

    }); 

和HTML看起來像這樣;

<div id='card2'> 

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

</iframe> 

我試圖使用JavaScript,然後寫入與從JSONP內容的iframe來創建一個IFRAME(我ommitted,方便調試的那部分);

我不知道爲什麼它不寫入iframe,是因爲iframe是由javascript創建的嗎?

我試過追加,HTML,之後,前置但似乎沒有讓我寫來的iframe

+1

那麼什麼是問題,小提琴似乎按預期方式工作。 – dfsq

+0

它打印在HTML中創建的myFrame2中,但不打印到由JavaScript創建的myFrame中。 –

+0

在您的演示中,它會正確打印兩個iframe。 – dfsq

回答

1

不,這不是一個錯誤。

Updated jsfiddle

正確的做法是:

$(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

非常感謝你,我認爲框架onload做了firefox的伎倆。 但是,當你刪除** $(「#myFrame」)。attr('src','about:blank')時,它很有趣:**它不再適用於Safari,但會在Firefox上工作,但它工作正常沒有src在我的原始小提琴safari –

+0

@DaveTeu問題是:iframe是一個容器,所以如果你設置src attr事件加載被觸發,你可以繼續。我在win 8.1上測試了它:ie11,FF和Chrome的最新版本。 – gaetanoM

+1

非常感謝。理解邏輯後我發現$('#myFrame')[0] .contentWindow.location.reload(true);如果我不想在我的代碼中使用about:blank,也可以工作。 6小時這個bug Zzz謝謝你, –