2012-06-12 11 views
5

Quindi, mi sono imbattuto in un problema un po 'strano, e spero che ci siano alcuni esperti di IE che potrebbero essere in grado di far luce su questo comportamento. La mia azienda esegue un'applicazione di Lift in tempo reale. Usiamo il modello di cometa per la comunicazione in tempo reale tra browser e server, come di consueto con Lift. Inoltre, vale la pena notare: nel caso in cui le comete non siano sincronizzate con il server (a causa di problemi di connessione o riavvio del server, qualsiasi cosa possa uccidere la sessione sul server) il server risponde a tale richiesta cometaria con un document.location.reload(); per ricaricare il pagina, avviare una nuova sessione e così via.IE continua a eseguire JS dopo che è stato ricevuto un 302?

Ora, per garantire che i logout avvengano come dovrebbero, abbiamo un url speciale (/ session/logout) che esegue tutte le operazioni di pulizia relative alla sessione e poi ti riporta alla nostra homepage. Questo può essere attivato facendo clic su un ancoraggio a quell'URL o il server potrebbe inviarti un 302 su quell'URL se provi a fare qualcosa che richiede di essere disconnesso. Abbastanza semplice, giusto? Nella maggior parte dei browser, questa grande opera, perché il flusso di lavoro simile a questa:

  1. utente o fa clic sul pulsante di disconnessione o il server invia una 302 a/sessione/logout
  2. esecuzione di JavaScript nella pagina corrente si ferma, così tutte le comete si spengono.
  3. Carichi del browser/sessione/uscita
  4. Il browser ha ricevuto il messaggio 302 dal server (che indica che la pulizia della sessione è stata effettuata) per inviare l'utente alla home page.
  5. Il browser carica la pagina iniziale.

Tuttavia, in IE stiamo vedendo il seguente comportamento:

  1. utente o fa clic sul pulsante di disconnessione o il server invia una 302 a/sessione/logout
  2. browser inizia il caricamento/session/logout
  3. Il browser ha ricevuto il messaggio 302 dal server (a indicare che la pulizia della sessione è stata effettuata) per inviare l'utente alla home page.
  4. Il browser inizia a caricare la home page.
  5. comete ricevono una document.location.reload(); dal server perché non sono mai chiusi da IE, il caricamento della pagina iniziale viene interrotta, e la pagina corrente viene ricaricata senza che l'utente registrato.

Ciò è del tutto indesiderabile poiché abbiamo bisogno del risultato corretto della/session/logout da caricare - in particolare in situazioni in cui un utente stava tentando di fare qualcosa che non potevano fare quando erano loggati (in tal caso il 302 restituito da logout sarebbe puntato dovunque cercassero originariamente di andare a).

Qualcuno ha incontrato questo tipo di problema prima? Qualche consiglio su come affrontare questo problema?

+0

Quale versione di IE? Modalità standard o no? – joshp

+0

IE 8 e IE 9, entrambi in modalità standard, presentano questo comportamento. –

risposta

0

Non so nulla di cometa, in particolare, ma dovresti essere più esplicito nello spegnimento della cometa.

Si consiglia di catturare l'evento window.onbeforeunload e di arrestare esplicitamente comet anziché affidarsi al browser per eseguire questo lavoro.

+0

Questo, sfortunatamente, non funziona.Sembrerebbe che, poiché IE ha deciso che in realtà non vuole andare in una pagina diversa, OnBeforeUnload non viene chiamato e sto ancora vedendo il comportamento di ricarica. :( –

Problemi correlati