作者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)