我通过输入javascript:blahblahblah到位置栏,通过autohotkey将javascript注入页面。
我需要确定IE是否在等待导航到新页面(例如,页面状态正在旋转,但尚未刷新到新页面。)
目前我正在使用document.readyState,但是,在远程网络服务器回复之前,有时会有很长的延迟。在那段延迟期间,readyState仍然说“完整”(因为它已经完成,它只是旧页面,而不是新页面)
如果我尝试对页面执行某些操作,它将在旧页面上运行,而不是即将发布的页面。
我可以在每次页面导航后睡几分钟,但这会让脚本永远消失。
挂钩onunload将无法通过地址栏工作,因为每次我在地址栏中输入内容时,都会触发onunload,导致大量的误报。
在IE上的javascript中是否有某种方法可以判断浏览器是否正在等待转到新页面?
答案 0 :(得分:1)
多么巧合,我只是在寻找相同的问题,我曾经使用 readyState 并面对你的问题,我在 VB 中发现了类似的事件处理程序你也尝试过使用,但正如你所说,它会在每次触发事件时执行。
溶胶: 我在MSDN中查找并找到忙碌属性,该属性获取一个值,指示对象是否参与导航或下载操作,现在我使用它除了 readyState ,忙碌用于等待远程服务器回复, 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()
}