2009-11-01 15 views
5

Ho una finestra di dialogo jQuery il cui contenuto è definito da un iframe. Finché non viene visualizzata la finestra di dialogo, il contenuto di questa iframe è invisibile. In IE, questo contenuto e il suo javascript associato è in esecuzione, in modo che quando viene visualizzata la finestra di dialogo, è evidente che il javascript ha già completato tutto il suo lavoro di caricamento. Ma in browser non-IE come Firefox e Chrome, questo iframe è, ancora una volta, eseguendo il suo javascript prima che la finestra di dialogo sia visibile, ma poi apparentemente re -esegue quando viene visualizzata la finestra di dialogo.jQuery dialog iframe viene caricato una volta in IE e due volte in altri browser?

Poiché questo è un iframe piuttosto costoso da creare (un sacco di javascript eseguiti con chiamate ajax e tutti), non voglio che il browser paghi il costo di inizializzarlo due volte. In effetti, potrei dire che voglio ritardare l'inizializzazione fino a quando il dialogo non viene effettivamente attivato. Ma se inizializza prima di essere richiamato e quindi mantiene quella inizializzazione (come fa IE) o ritarda l'inizializzazione fino a quando il dialogo è visibile, potrei accontentarmi di entrambi.

Quello che non riesco a risolvere è quello che sto vedendo ora, dove i browser non IE inizializzano due volte, per la prima volta sono uno spreco totale da quando sono reinizializzati quando appare la finestra di dialogo.

La pagina mi riferisco a: http://openidux.dotnetopenauth.net/. È possibile riprodurre il comportamento facendo clic sul collegamento Accedi nell'angolo in alto a destra.

Grazie.

risposta

7

Ho finito per impostare inizialmente la proprietà iframe.src su "about: blank" e ho impostato la sorgente solo quando la finestra di dialogo viene effettivamente visualizzata. E poi, per evitare che si ricarichi quando il dialogo si nasconde (stupido, lo so), l'ho impostato su 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; 
     }, 
    }); 
}); 
0

Non ho dato un'occhiata approfondita al collegamento, ma che tipo di evento onload stai usando per inizializzare l'IFRame? Potrebbe essere un problema onDomLoad/onLoad?

2

Ho avuto lo stesso problema solo ora. Ho trovato il problema di essere collegato all'opzione di animazione quando si apre la finestra di dialogo, sembra interferire con l'iframe. Basta rimuovere le impostazioni "mostra" dal tuo javascript.

cambiamento questo

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

a questo

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