2009-11-01 23 views
5

Tengo un cuadro de diálogo jQuery cuyo contenido está definido por un iframe. Hasta que aparezca el cuadro de diálogo, el contenido de este iframe es invisible. En IE, este contenido y su javascript asociado se está ejecutando, por lo que cuando se muestra el cuadro de diálogo, es evidente que el javascript ya ha completado todo su trabajo de carga. Pero en navegadores no IE como Firefox y Chrome, este iframe está, de nuevo, ejecutando su javascript antes de que el cuadro de diálogo sea visible, pero aparentemente re lo ejecuta cuando se muestra el cuadro de diálogo.iframe de diálogo jQuery cargando una vez en IE y dos veces en otros navegadores?

Debido a que este es un iframe bastante caro de crear (muchos javascript se ejecutan con llamadas ajax y todo), no quiero que el navegador pague el costo de inicializarlo dos veces. De hecho, podría decir que quiero retrasar la inicialización hasta que el diálogo realmente aparezca. Pero ya sea que se inicialice antes de que aparezca y luego preserve esa inicialización (como lo hace IE) o simplemente retrasa la inicialización hasta que el diálogo esté visible, podría conformarme con cualquiera de los dos.

Lo que no puedo conformar es lo que estoy viendo ahora, donde los navegadores que no son de IE se inicializan dos veces, siendo la primera vez una pérdida total ya que se reinician cuando aparece el diálogo.

La página a la que me refiero es: http://openidux.dotnetopenauth.net/. Puede reproducir el comportamiento haciendo clic en el enlace de inicio de sesión en la esquina superior derecha.

Gracias.

Respuesta

7

Terminé estableciendo inicialmente la propiedad iframe.src en "about: blank" y solo configuro la fuente cuando aparece el cuadro de diálogo. Y luego, para evitar que se vuelva a cargar cuando se oculta el diálogo (estúpido, lo sé), lo puse de nuevo en blanco: en blanco.

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

No he echado un vistazo profundo al enlace, pero ¿qué tipo de evento de carga está utilizando para inicializar el IFRame? ¿Podría ser un problema onDomLoad/onLoad?

2

Tuve el mismo problema ahora. El problema se relacionó con la opción de animación al abrir el diálogo, parece interferir con el iframe. Simplemente elimine la configuración de "mostrar" de su javascript.

cambio de este

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

a este

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