Le contenu d’iframe disparaît sur Firefox

Je remplis une iframe vide avec du HTML de base, en utilisant $iframe.contents().find('body').html(contentBody);

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

Cela fonctionne bien sur Chrome. Sur Firefox, je peux voir très brièvement le contenu qu’il contient, mais il disparaît soudainement. Lorsque je définis un point d’arrêt sur cette ligne avec Firebug, puis que je continue à fonctionner, le contenu rest à l’intérieur. Mais si je définis un point d’arrêt sur la ligne après, il disparaît.

Un indice sur la façon de résoudre ce problème?

J’ai rencontré un problème similaire en essayant de remplir une iframe créée dynamicment. L’utilisation de iframe onload event a résolu la situation pour moi. Comme on le voit, la solution onload ne fonctionne pas pour les autres navigateurs que FF, d’où la méthode standard préservée.

 /** * Fills an iframe using data stored within textarea. Useful for creating email * template previews * * @param {Ssortingng} inputSelector * @param {Ssortingng} outputElemClasses * @return void */ function displayEmail(inputSelector, outputElemClasses) { $(inputSelector).each(function(i) { var templateData = $(this).text(); var $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 {Ssortingng} data * @return void */ function updateIframe($iframe, data) { $iframe.contents().find('html').html(data); } 

Je ne peux pas voir tout votre code, mais j’ai travaillé avec ce que vous m’avez donné de manière à le faire. Il est possible que vous ne donniez pas au script la possibilité de laisser le rest du HTML se charger avant qu’il ne soit exécuté, ce qui peut donner lieu à des événements imprévisibles. Je constate que si je n’attends pas que la fenêtre se charge, l’image ne s’affichera pas. Si vous emballez tout ce que vous avez fait, comme ci-dessous, alors vous ne devriez pas avoir de problème:

 $( window ).load( function() { var html = "image"; $( "#myIframe" ).contents().find( 'body' ).html( html ); }); 

Rappelez-vous simplement que jQuery.html () remplacera tout le code HTML contenu dans l’élément donné.