讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議128:推薦使用beforeunload事件 >

建議128:推薦使用beforeunload事件

unload表示卸載的意思,這個事件在從當前瀏覽器窗口內移動文檔的位置時觸發,也就是說,在通過超鏈接、前進或後退按鈕等從一個頁面跳轉到其他頁面,或者關閉瀏覽器窗口時觸發。例如,下面函數的提示信息將在卸載頁面時發生,即在離開頁面或關閉窗口前執行。


window.onunload=f;

function f{

alert("888");

}


在unload事件中無法有效阻止默認行為,因為該事件結束後,頁面將不復存在。由於在窗口關閉或離開頁面之前只有很短的時間來執行事件處理函數,因此不建議使用該事件類型。使用該事件類型的最佳方式是取消該頁面的對象引用。

beforeunload事件與unload事件功能相近,不過它更人性化,如果beforeunload事件處理函數返回字符串信息,那麼該字符串會顯示在一個確認對話框中,詢問用戶是否離開當前頁面。例如,運行下面的示例,當刷新或關閉頁面時,會彈出提示信息。


window.onbeforeunload=function(e){

return"你的數據還沒有保存呢!";

}


beforeunload事件處理函數的返回值可以為任意類型,IE和Safari瀏覽器的JavaScript解釋器能夠調用toString方法把它轉換為字符串,並且將字符串信息顯示在提示對話框中。而對於Firefox瀏覽器來說,則會把返回值視為空字符串顯示。如果beforeunload事件處理函數沒有返回值,則不會彈出任何提示對話框,此時beforeunload事件與unload事件響應效果相同。

雖然beforeunload不是標準事件類型,但是它獲得絕大數主流瀏覽器的支持,目前僅有Opera瀏覽器不支持該事件類型。使用該事件類型可以在用戶離開頁面時提醒是否保存數據或完成相關操作。