簡體   English   中英

IE收到302后繼續執行JS?

[英]IE continues executing JS after a 302 is received?

所以,我遇到了一個奇怪的問題,我希望有一些IE專家能夠對這種行為有所了解。 我的公司運行一個實時的Lift應用程序。 我們使用彗星模型在瀏覽器和服務器之間進行實時通信,這是Lift的標准配置。 另外值得注意的是:如果彗星與服務器不同步(由於連接問題或服務器重啟,任何會導致服務器上會話失效的事件),服務器都會使用document.location.reload();響應該彗星請求document.location.reload(); 重新加載頁面,啟動新會話,等等。

現在,為了確保注銷按預期發生,我們有一個特殊的URL(/ session / logout),可以完成所有與會話相關的清理工作,然后將您踢回我們的主頁。 這可以通過單擊該URL的錨點來觸發,或者如果您嘗試執行需要注銷的操作,服務器可能會向您發出302該URL。 很簡單吧? 在大多數瀏覽器中,這很有用,因為工作流看起來像這樣:

  1. 用戶單擊注銷按鈕或服務器發送302到/ session / logout
  2. 當前頁面上的Javascript執行停止,因此所有彗星都會關閉。
  3. 瀏覽器加載/會話/注銷
  4. 瀏覽器從服務器收到302消息(表示會話清理已完成)以將用戶踢到主頁。
  5. 瀏覽器加載主頁。

但是,在IE中我們看到以下行為:

  1. 用戶單擊注銷按鈕或服務器發送302到/ session / logout
  2. 瀏覽器開始加載/會話/注銷
  3. 瀏覽器收到來自服務器的302消息(表示已完成會話清理)以將用戶踢到主頁。
  4. 瀏覽器開始加載主頁。
  5. Comets收到document.location.reload(); 從服務器,因為它們從未被IE關閉,主頁的加載被中止,並且當前頁面被重新加載而用戶沒有登錄。

這是完全不合需要的,因為我們需要加載/ session / logout的正確結果 - 特別是在用戶嘗試執行他們登錄時無法執行的操作的情況下(在這種情況下,302從注銷將指向他們最初試圖去的地方)。

以前有沒有人遇到過這種問題? 關於如何處理這個問題的任何建議?

具體而言,我對彗星一無所知,但你應該更明確地關閉彗星。

我建議捕獲window.onbeforeunload事件並明確關閉彗星,而不是依靠瀏覽器為您完成此工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM