2012-06-12 17 views
5

Biraz garip bir konuyla karşılaştım ve bu davranışa ışık tutabilecek bazı IE vahşileri olduğunu umuyorum. Şirketim bir gerçek zamanlı Lift uygulaması çalıştırıyor. Lift ile standart olarak, tarayıcılar ve sunucu arasında gerçek zamanlı iletişim için kuyruklu yıldız modelini kullanıyoruz. Ayrıca belirtmek gerekirse: Kuyruklu yıldızların sunucuyla eşitlenmemesi durumunda (bağlantı sorunları veya sunucu yeniden başlatması nedeniyle, sunucudaki oturumu sonlandıracak olan herhangi bir şey), sunucu, o kuyruklu yıldız isteğine yanıt vermek için document.location.reload(); sayfa, yeni bir oturum başlatın, vb.IE, 302 alındıktan sonra JS'yi yürütmeye devam ediyor?

Şimdi, çıkışların gerektiği gibi yapıldığından emin olmak için, oturumla ilgili tüm temizlik işlemlerini gerçekleştiren özel bir URL’ye (/ session/logut) sahibiz, sonra sizi ana sayfamıza geri gönderiyoruz. Bu, bu URL'ye bir bağlantıyı tıklatarak tetiklenebilir veya oturumunuzu kapatmanızı gerektiren bir işlem yapmaya çalışırsanız sunucu size bu URL'ye 302 verebilir. Yeterince basit, değil mi? böylece,

  1. Kullanıcı ya çıkış düğmesini tıkladığında veya sunucu 302/oturum/
  2. geçerli sayfada
  3. JavaScript yürütme durur çıkış gönderir: iş akışı şuna benzer çünkü çoğu tarayıcılarda bu harika çalışıyor tüm kuyruklu yıldızlar kapatıldı.
  4. Tarayıcı yüklemeleri/oturumu/oturumu kapatma
  5. Tarayıcı, kullanıcıyı ana sayfaya yönlendirmek için sunucudan 302 ileti aldı (oturumun temizlendiğini belirten).
  6. Tarayıcı ana sayfayı yükler.

Ancak IE şu davranışı görüyoruz:

  1. Kullanıcı ya çıkış düğmesini tıkladığında veya sunucu 302/oturum/
  2. Tarayıcı yükleme başlar çıkış gönderir/oturum/Tarayıcı, kullanıcıyı ana sayfaya atmak için sunucudan 302 mesaj aldığını (oturum temizlemenin yapıldığını belirten) aldığını bildirdi.
  3. Tarayıcı ana sayfayı yüklemeye başlar.
  4. Kuyruklu onlar IE tarafından asla kapatamazsınız çünkü, ana sayfanın yüklenmesi iptal edilir ve geçerli sayfa kaydedilir kullanıcı olmadan yeniden yüklenir sunucudan bir document.location.reload(); alırlar.

Bunun nedeni tamamen istenmeyen bir Bir kullanıcının oturum açtıklarında yapamayacakları bir şeyi yapmaya çalıştığı durumlarda, özellikle yüklemek için/session/logout'un doğru sonucuna ihtiyacımız var (bu durumda, 302 çıkışından döndürülmüş olur) başlangıçta nereye gitmeye çalışıyorlarsa).

Daha önce bu tür bir soruna karşı kimsenin var mı? Bu sorunla nasıl başa çıkılacağına dair herhangi bir tavsiye var mı?

+0

Ne tür bir IE sürümü? Standartlar Modu mu değil mi? Her ikisi de standart modda çalışan – joshp

+0

IE 8 ve IE 9, bu davranışı sergiler. –

cevap

0

Özellikle kuyrukluyıldız hakkında hiçbir şey bilmiyorum, ancak kuyrukluyıldızın kapanmasında daha açık olmalısınız.

Bu işi sizin için yapmanız için window.onbeforeunload olayını yakalamanızı ve tarayıcıya güvenmek yerine açık bir şekilde kuyrukluyıldızı kapatmanızı tavsiye ederim.

+0

Bu maalesef işe yaramıyor.Görünüşe göre IE, aslında farklı bir sayfaya gitmek istemediğine karar verdi, onBeforeUnload çağrılmadı ve hala yeniden yükleme davranışını görüyorum. :( –

İlgili konular