作者forgmonkey (悲情城市之悲情程式猿)
看板Ajax
標題[問題] 請教幾個關於onload的事件行為
時間Wed Jul 22 23:37:18 2009
1. 執行window.location.reload()後
可以馬上在window、document或body裡面放入load事件的handler嘛?
這些handler是不是可能在reload的過程中被清除掉?
或是要body.addEventListener時,body還根本不存在?
2. 是不是window.location.reload()後,等到完全載入了,才會開始body的load事件的
"propagation->handler->bubbling"三步驟?
因為load事件是不會bubbling的,所以只能在propagation階段抓到。這時候抓到可以確
保body已經load完畢了嘛?
3. 我有用Date寫一個小函式,用迴圈檢查經過指定秒數後才會離開迴圈
這樣的方法來做為程式的延遲,這樣的方法有沒有可能讓迴圈完全佔用CPU
而使得事件也被延後執行?
也就是說,是不是只要延遲有限的時間,一定可以讓事件都被執行?
4. 那如果用setTimeout()能夠做為第3點要的功能的機制嘛?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.2.83
1F:→ arrack:setTimeout原本就是要用來作延遲的觸發的,不就是你的3? 07/23 00:08
2F:→ forgmonkey:我是想說3會不會造成回圈的執行佔用資源,造成handler 07/23 00:12
3F:→ forgmonkey:有可能被回圈完全block,第四點也是類似的問題 07/23 00:12
4F:→ forgmonkey:我改一下敘述好了... XD 07/23 00:13
※ 編輯: forgmonkey 來自: 59.121.2.83 (07/23 00:15)
5F:→ fillano:reload()時,載入的是檔案,不在檔案中的不會載入。另外, 07/23 07:25
8F:→ fillano:了解timer運作,你就會知道你用迴圈延遲執行會發生什麼事 07/23 07:35
感謝fillano,實際上我在寫firefox extension,我沒有用JQuery。
那想在請問一下,window因該不是檔案的部份,那window.document算是檔案的一部分嘛?
實際上我從extension內對window.addEventListener,不論是不是在capture階段捕捉
reload之後handler都沒被觸發。
我現在是對firefox內該分頁瀏覽器的<xul:browser>掛
load的handler,可以在capture階段收到event
然後在這個handler裡面再對window的load在掛一個handler
而且很詭異的,不論是不是capture都可以執行
(load不會bubble,所以在bubble phase因該抓不到)
但是結果是保證會是在body.onLoad之後執行
(這很也詭異,不過看了timer的文章後了解了原因)
但是我在window onLoad的handler裡面 對網頁元素觸發click事件
卻是沒有效果的,現在這在苦惱這個問題
兩層的callback可能有點複雜...
重點是不能用啊啊啊啊~~~
文件看完了,原來整個都是單一執行緒
然後從thread pool裡面挑出來放到queue
不過他怎麼決定何時是可以中斷現在的block的時機?
如果迴圈可以被中斷,那事件是有可能被執行掉的(雖然我覺得不可能 XD)
※ 編輯: forgmonkey 來自: 59.121.1.14 (07/23 10:05)
※ 編輯: forgmonkey 來自: 59.121.1.14 (07/23 10:07)
※ 編輯: forgmonkey 來自: 59.121.1.14 (07/23 10:09)
※ 編輯: forgmonkey 來自: 59.121.1.14 (07/24 10:13)