2012-04-01 105 views
6

我填写基本的HTML空iframe中消失,使用$iframe.contents().find('body').html(contentBody);iframe中的内容在Firefox

参见:http://jsfiddle.net/UjT2b/2/

这非常适用于Chrome浏览器。在Firefox上,我可以非常简单地看到里面的内容,但它突然消失了。当我用Firebug在这一行上设置一个断点时,然后继续运行,内容保持在内部。但是如果我在后面设置了断点,它就会消失。

任何有关如何解决这个问题的线索?

+0

这是正确的小提琴吗?我没有看到任何与iframe有关的事情。 – 2012-04-01 19:55:23

+0

对不起,我编辑了链接。 – 2012-04-01 20:00:03

+0

好吧,我对Chrome,Safari和Firefox的结果也一样。我在Mac上使用Firefox 11。它可能是别的吗? – 2012-04-01 20:02:39

回答

2

我看不到你的整个代码,但已经用你给我的方式工作,我会这样做。在执行之前,您有可能没有让脚本有机会让其余的HTML加载,从而导致不可预知的事情发生。我发现,如果我不等待窗口加载,那么图像就不会显示出来。如果您包住你没有,像下面的一切,那么你应该不会有问题:

$(window).load(function() { 

    var html = "<img src='http://www.google.fr/logos/2011/Louis_Daguerre-2011-hp.jpg' alt='image' />"; 


    $("#myIframe").contents().find('body').html(html); 

}); 

只要记住,jQuery.html()将取代给出的元素里面所有的HTML。

4

我尝试填充动态创建的iframe时遇到类似的问题。 iframe onload事件的使用为我解决了这个问题。正如所见,onload解决方案对FF以外的其他浏览器不起作用,因此是保留的标准方式。

/** 
* Fills an iframe using data stored within textarea. Useful for creating email 
* template previews 
* 
* @param {String} inputSelector 
* @param {String} outputElemClasses 
* @return void 
*/ 
function displayEmail(inputSelector, outputElemClasses) 
{ 
    $(inputSelector).each(function(i) { 
     var templateData = $(this).text(); 
     var $iframe = $('<iframe></iframe>'); 
     $iframe.addClass(outputElemClasses); 
     $iframe.insertAfter(this); 
     // non-firefox 
     updateIframe($iframe, templateData); 
     // firefox 
     $iframe.load(function(e){ 
      updateIframe($iframe, templateData); 
     }) 
    }) 
} 


/** 
* Fills in target iframe using supplied data 
* 
* @param {Object} $iframe 
* @param {String} data 
* @return void 
*/ 
function updateIframe($iframe, data) 
{ 
    $iframe.contents().find('html').html(data); 
}