windows.onunload 備忘

16 views
Skip to first unread message

gugod

unread,
Oct 10, 2006, 10:08:05 AM10/10/06
to hsinchu.js
1. unload Event handler ,是在 DOM 已經被 unload
之後才呼叫的。

2. 無法取消 unload 事件,也無法停止它。呼叫
event.preventDefault(),或是將 event.returnValue 設為 false
都無用。

3. IE 與最近的 Firefox 另有一 beforeunload
事件可以使用。這個事件可以被取消,取消之後就不會發生
unload 事件,但並不在標準中。見
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onbeforeunload.asp

4. 如果在 unload Event hanlder
裡面,送出網頁表單的話,會使 Safari Crash ,見
http://www.opendarwin.org/pipermail/webkit-changes/2005-December/002160.html
。但此問題已經在 WebKit 裡修掉了。

5. 一般關於 Javascript Memory Leak 的處理,都是在 unload
event handler 之中進行,比如說,將各個 event handler 設為
null。

lukhnos

unread,
Oct 11, 2006, 12:38:07 AM10/11/06
to hsinchu.js
On Oct 10, 10:08 pm, "gugod" <gugod...@gmail.com> wrote:
> 1. unload Event handler ,是在 DOM 已經被 unload
> 之後才呼叫的。

有哪些情況會用到這個 event handler 呢?

gugod

unread,
Oct 11, 2006, 1:00:05 AM10/11/06
to hsinchu.js

一般來說 DOM unload 會發生,表示用戶:

- 點了畫面上的 URL。
- 點了Bookmark 裡的 URL
- 自已手打 URL
- 關掉視窗

也就是說使用者要離開目前這個站了(以 WebApp
的想法來說,就好像是直接從一個 Workflow
的中途直接跳走)。
所以 unload 該做的,大概上就像是「只好趕快把目前
WebApp 的 state 記下來」這樣的事吧。

但是這裡有一點很弔詭的地方:DOM 如果已經被 unload
的話,那裡面的 javascript ,以及其本來拿得到的
資訊,也應該也會被 unload
吧?但是沒有。我想瀏覽器會在「DOM
被unload」與「載入新的 DOM」之前多加一個
叫做「砍掉 DOM」的狀態。因此,DOM unload
這個狀態只是一個步驟而已。基本上,除了 unload
事件無法取消以外,
在 unload
裡面能做的事情與其他地方沒什麼兩樣。也還可以送出
XHR。把 unload 想成是 DOM destructor 裡會去做的
某個步驟,似乎有幾分相像。

Reply all
Reply to author
Forward
0 new messages