随笔-6  评论-38  文章-40  trackbacks-0
 

1.在javascript中,可以用三种方式来模拟多线程。
a)在javascript中用command模式模拟多线程
b)window.setTimeout(code,time)
让代码在指定时间后执行一次。
c)setInterval(code,time)
让代码按照指定时间间隔来执行。

注意setTimeout与setInterval的区别

2.似乎无法在javascript的单线程执行环境中利用AutoItX来捕捉onload事件中的alert。
背景:selenium中采用了重载window.alert的方式,来截获所有javascript中的alert。
Window.alert = function (msg) {
This.Alerted.push(msg);
};
这样,所有的alert消息被悄无声息地存放在一个队列中。原本的alert弹出后,如果不点击OK或者关闭,整个javascript执行线程就一直停止。重载window.alert的方式避免弹出alert窗口,保证了selenium顺利地执行。
但是,这种方式无法捕捉body的onload事件中的alert。因为每一次刷新页面的时候,所有的被重载的方法和事件都会被清空,而我们来不及再一次重载alert方法。
使用Watir的时候,我注意到了她是借助一个名为AutoItX库来实现这个功能的。于是,设想是否可以通过同样的方法来捕捉onload事件中的alert方法。
我不详细介绍AutoItX类库,简要说一下她的原理:
var autoit = new ActiveXObject(“AutoItX3.Control”);
autoit.WinWait(title,text,…);//等待标题为title,包含text的窗口出现

开始的设想是使用如下的方法来不断查询alert窗口是否弹出:
window.setTimeout(‘fuction check() {autoit.WinExists(title,txt) == 1?return:check()’,100)
但是,却无法捕捉到alert。原因就是alert弹出后,如果不点击OK或者关闭,整个javascript执行线程就会停止。所以,调用check函数的计时也停止了。这个问题用模拟多线程是无法解决的。

对于这个问题的一个解决方案

posted on 2006-12-02 08:11 一手的小窝窝 阅读(1319) 评论(0)  编辑  收藏 所属分类: JAVASCRIPT

只有注册用户登录后才能发表评论。


网站导航: