Also, ich bin in ein komisches Problem geraten, und ich hoffe, dass es da draußen einige IE Savants gibt, die vielleicht etwas Licht in dieses Verhalten bringen können. Meine Firma betreibt eine Echtzeit-Lift-Anwendung. Wir verwenden das Comet-Modell für die Echtzeit-Kommunikation zwischen Browsern und Server, wie es bei Lift üblich ist. Auch erwähnenswert: Für den Fall, dass Kometen nicht mehr mit dem Server synchronisiert werden (entweder wegen Verbindungsproblemen oder eines Serverneustarts, alles, was die Sitzung auf dem Server beenden würde), antwortet der Server auf diese Kometanforderung mit einem document.location.reload();
Seite, starten Sie eine neue Sitzung und so weiter.IE setzt die Ausführung von JS fort, nachdem ein 302 empfangen wurde?
Nun, um sicherzustellen, dass Abmeldungen so passieren, wie sie sollten, haben wir eine spezielle URL (/ Sitzung/Abmeldung), die alle sitzungsbezogenen Bereinigungen durchführt und Sie zurück auf unsere Homepage bringt. Dies kann entweder durch Klicken auf einen Anker zu dieser URL ausgelöst werden oder der Server gibt Ihnen möglicherweise einen 302 an diese URL aus, wenn Sie versuchen, etwas zu tun, für das Sie abgemeldet werden müssen. Einfach genug, oder? In den meisten Browsern funktionieren diese groß, weil der Workflow etwas wie folgt aussieht:
- Benutzer entweder klickt auf den Logout-Button oder der Server sendet eine 302/session/Logout
- Javascript Ausführung auf der aktuellen Seite beendet, so Alle Kometen wurden stillgelegt.
- Browser lädt/Sitzung/Abmeldung
- Browser empfangen 302 Nachricht vom Server (bedeutet die Sitzung Bereinigung ist getan), um den Benutzer auf die Homepage zu treten.
- Browser lädt Homepage.
jedoch in IE sind wir das folgende Verhalten zu sehen:
- Benutzer entweder klickt auf den Logout-Button oder der Server sendet eine 302/session/logout
- Browser startet das Laden/session/Abmelden
- Browser erhielt 302 Nachricht vom Server (bedeutet, dass die Sitzungsbereinigung durchgeführt wurde), um den Benutzer auf die Homepage zu treten.
- Browser beginnt mit dem Laden der Startseite.
- Kometen erhalten ein
document.location.reload();
vom Server, weil sie wurden still nie von IE nach unten, wird das Laden der Homepage abgebrochen, und die aktuelle Seite in ohne dass der Benutzer angemeldet neu geladen.
Diese völlig unerwünscht ist, weil Wir brauchen das korrekte Ergebnis der/Session/Logout zu laden - vor allem in Situationen, in denen ein Benutzer versuchte, etwas zu tun, was sie nicht tun konnten, wenn sie angemeldet waren (in diesem Fall zeigen die 302 von Logout zurückgegeben) wohin auch immer sie ursprünglich versuchten, zu gehen).
Hat jemand schon einmal mit dieser Art von Problem konfrontiert? Irgendwelche Tipps zum Umgang mit diesem Thema?
Welche Version von IE? Standardmodus oder nicht? – joshp
IE 8 und IE 9, die beide im Standardmodus ausgeführt werden, zeigen dieses Verhalten. –