2012-04-01 9 views
6

jestem wypełnienie pustej iframe z podstawowego HTML, używając $iframe.contents().find('body').html(contentBody);zawartość iframe znika na Firefox

zobacz: http://jsfiddle.net/UjT2b/2/

Działa to dobrze na Chrome. W Firefoksie widzę bardzo krótko zawartość wewnątrz, ale nagle znika. Kiedy ustawiam punkt przerwania w tej linii za pomocą Firebug, a następnie kontynuuję działanie, zawartość pozostaje w środku. Ale jeśli ustawię punkt przerwania w linii po, to zniknie.

Jakąkolwiek wskazówkę, jak to naprawić?

+0

Czy to prawda skrzypce? Nie widzę żadnej rzeczy, która ma związek z iframe. –

+0

Przepraszamy, edytowałem link. –

+0

OK, otrzymuję taki sam wynik w Chrome, Safari i Firefox. Używam Firefoksa 11 na Macu. Czy to może być coś innego? –

Odpowiedz

2

Nie widzę twojego całego kodu, ale pracowałem z tym, co mi dałeś w taki sposób, w jaki bym to zrobił. Istnieje szansa, że ​​nie dasz skryptowi szansy, aby resztę ładunku HTML załadować przed jego wykonaniem, a co za tym idzie, mogą się wydarzyć nieprzewidywalne rzeczy. Uważam, że jeśli nie będę czekać na załadowanie okna, obraz się nie pojawi. Jeśli obudować wszystko zrobiłeś jak poniżej, to nie powinien mieć problemu:

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

}); 

Wystarczy pamiętać, że jQuery.html() zastąpi wszystkie HTML wewnątrz danego elementu.

4

Wystąpił podobny problem podczas próby wypełnienia dynamicznie utworzonego elementu iframe. Wykorzystanie zdarzenia onrame onload rozwiązało dla mnie sytuację. Jak widać rozwiązanie onload nie działa dla innych przeglądarek niż FF, stąd zachowany standardowy sposób.

/** 
* 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); 
}    
Powiązane problemy