2016-04-23 51 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谢谢你, –