2012-03-12 74 views
1

我有一個寫入窗體正文的onunload方法。由於該頁面從服務器獲取大量內容以供流式傳輸,因此下載整個表單需要一段時間。當表單被下載到瀏覽器中時,如果用戶單擊窗口關閉按鈕,有時會發生unload事件(寫入以調用服務器端操作以重置某個標誌)。卸載方法是寫在頁面的末尾,這是一個原因嗎?無論如何,我們可以確保onunload保證被稱爲?HTML頁面卸載不會總是在IE中調用

+0

從我過去的經驗來看,onunload事件不會保證只要您希望運行就可以運行。如果在代碼完成之前加載下一頁,則可能無法完成。根據應用程序的不同,您可以執行警報或確認提示,爲您的代碼提供一些執行時間。 – GoldenNewby 2012-03-12 03:28:13

回答

0

有兩個原因。其中之一就像你說的那樣,瀏覽器甚至可能不會卸載,所以你應該把它聲明在你的身體標記之上。

另一方面,正如GoldenNewby所述,您需要給代碼一些時間來完成,比如提醒。這是因爲在下一頁準備就緒時JavaScript將從內存中清除,並且只會在舊腳本上停止執行。如果您可以保證腳本比頁面加載花費的時間更少,則不需要警報,但如果執行時間可能需要2ms或更長時間,則需要花費一些時間。

0

IE有一個onbeforeunload事件,您可以使用它。只需設置一個標誌,以便您的onunload可以提前退出,如果onbeforeunload已經做到了。

window.onunload = window.onbeforeunload = function() { 
    if (window.isAlreadyUnloaded) return; 
    window.isAlreadyUnloaded = true; 
    // do your stuff here. 
} 
1

擊中你可能是事實,如果在window.onload還沒有啓動IE不會觸發unload事件的事情。本博客文章中描述瞭解決方案:http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/

+0

注意:該博客文章中描述的onstop事件在更現代版本的IE(至少10和11)中的工作方式不同。在onload事件之前從頁面導航(或刷新)時,它不會觸發。對我來說,工作解決方案不僅要將處理程序綁定到onload,還要綁定到onbeforeunload事件。 – 2013-11-26 12:12:04