Boîte de dialog jQuery iframe se chargeant une fois dans IE et deux fois dans d’autres navigateurs?

J’ai un dialog jQuery dont le contenu est défini par une iframe. Tant que la boîte de dialog n’est pas affichée, le contenu de cette iframe est invisible. Dans IE, ce contenu et son code javascript associé sont en cours d’exécution. Ainsi, lorsque la boîte de dialog est affichée, il est évident que le code javascript a déjà terminé tout son chargement. Mais dans les navigateurs non IE, tels que Firefox et Chrome, cette iframe exécute à nouveau son code javascript avant que la boîte de dialog ne soit visible, mais apparemment, il l’exécute à nouveau lorsque la boîte de dialog est affichée.

Comme il s’agit d’une iframe assez coûteuse à créer (de nombreux javascript s’exécutant avec des appels ajax et autres), je ne veux pas que le navigateur paie le coût de son initialisation deux fois. En fait, je pourrais dire que je veux retarder l’initialisation jusqu’à ce que le dialog soit réellement affiché. Mais qu’il s’initialise avant d’être affiché puis préserve cette initialisation (comme le fait IE) ou retarde simplement l’initialisation jusqu’à ce que la boîte de dialog soit visible, je pourrais choisir l’une ou l’autre.

Ce que je ne peux pas régler, c’est ce que je vois à présent, où les navigateurs non-IE s’initialisent deux fois, la première fois constituant un gaspillage total, car ils sont réinitialisés lorsque la boîte de dialog apparaît.

La page à laquelle je fais référence: http://openidux.dotnetopenauth.net/ . Vous pouvez reproduire le comportement en cliquant sur le lien Connexion dans le coin supérieur droit.

Merci.

J’ai fini par définir la propriété iframe.src sur “about: blank” pour la première fois, et définir la source uniquement lorsque la boîte de dialog apparaît. Et puis, pour éviter le rechargement lorsque le dialog se cache (stupide, je sais), je le redéfinis sur about: blank.

$(document).ready(function() { $("#loginDialog").dialog({ close: function(event, ui) { // Clear the URL so Chrome/Firefox don't refresh the iframe when it's hidden. iframe.src = "about:blank"; }, open: function(event, ui) { iframe.src = loginContent; }, }); }); 

J’ai eu le même problème tout à l’heure. J’ai trouvé le problème lié à l’option d’animation lors de l’ouverture de la boîte de dialog, cela semble interférer avec l’iframe. Supprimez simplement les parameters “show” de votre javascript.

change ça

 $("#blah").dialog({ title: 'Dialog Title', show: 'slide', .... }); 

pour ça

 $("#blah").dialog({ title: 'Dialog Title', ... }); 

Je n’ai pas examiné le lien en profondeur, mais quel type d’événement onload utilisez-vous pour initialiser IFRame? Pourrait-il s’agir d’un problème onDomLoad / onLoad?