2012-01-30 22 views
0

我通过输入javascript:blahblahblah到位置栏,通过autohotkey将JavaScript注入到页面中。我需要确定IE是否在等待导航到新页面(例如,页面状态正在旋转,但它尚未刷新到新页面)。确定浏览器是否正在导航 - 没有onunload

目前我正在使用document.readyState,但是,在远程Web服务器回复之前有时会有很长的延迟。在那段延迟期间,readyState仍然说“完整”(因为它是完整的,它只是旧页面,而不是新页面)

如果我尝试对页面做些什么,它会在旧页面上运行,而不是即将到来的。

每次页面导航后,我都可以睡几分钟,但这会让脚本永远消失。

挂钩onunload不会通过地址栏工作,因为每次我在地址栏中输入内容时都会触发onunload,导致大量的误报。

有没有在IE浏览器的JavaScript的某种方式来告诉浏览器是否正在等待去一个新的页面?

回答

1

真巧,我只是四处寻找同样的问题,我用readyState的,面对你的问题,我在发现了类似的事件处理程序VB喜欢你也尝试使用,但如你所说它会在每次触发事件时执行。

溶胶: 我在MSDN抬头,发现财产得到一个值,指出对象是否是一家从事导航或下载操作,现在我用它除了 readyState的,则忙碌用于等待远程服务器回复,并且准备好状态用于使对象准备好采取动作。

通知:我试图单独使用繁忙,但有些时候回复太快,下一条指令试图在对象准备好之前执行。

实例AHK(测试登录页面,高倍率20倍):

Loop, 20 
{ 
Global IE := ComObjCreate("InternetExplorer.Application") 
IE.visible := 1 
IE.Silent := 0 
Login: 
IE.navigate("www.example.com") 
While (IE.ReadyState != 4 or IE.Busy = True) 
continue 

IE.document.forms("login").name.value := "Username" 
IE.document.forms("login").password.value := "Password" 
;IE.document.forms("login").s1.Click() 
IE.document.forms("login").Submit() 
While (IE.ReadyState != 4 or IE.Busy = True) 
continue 

;sleep 1000 ;use it just to see that you are login successfully 
IE.Stop() 
IE.Quit() 
} 
+0

堆栈溢出又一次一天扑救。谢谢! – 2012-04-25 20:08:49