2012-04-01 82 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); 
}