【问题标题】:Determine if browser is navigating away - without onunload确定浏览器是否正在导航 - 没有 onunload
【发布时间】:2023-03-16 19:20:02
【问题描述】:

我通过在地址栏中输入 javascript:blahblahblah 通过自动热键将 javascript 注入页面。

我需要确定 IE 是否正在等待导航到新页面(例如,页面状态正在旋转,但尚未刷新到新页面)。

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

如果我尝试对页面执行某些操作,它将在旧页面上运行,而不是在即将到来的页面上运行。

我可以在每个页面导航后只睡几分钟,但这会使脚本花很长时间。

挂钩 onunload 无法通过地址栏起作用,因为每次我在地址栏中输入内容时都会触发 onunload,从而导致大量误报。

IE 上的 javascript 中有什么方法可以判断浏览器是否正在等待转到新页面?

【问题讨论】:

    标签: javascript internet-explorer autohotkey


    【解决方案1】:

    真是巧合,我只是在寻找同样的问题,我曾经使用 readyState 并遇到您的问题,我在 VB 中找到了类似的事件处理程序,例如您也尝试过使用,但正如您所说,它会在每次触发事件时执行。

    溶胶: 我在 MSDN 中查找并找到 Busy 属性,该属性获取一个值,该值指示对象是否正在进行导航或下载操作,现在我除了使用它之外 readyStateBusy 用于等待远程服务器回复,readyState 用于对象准备对其进行操作。

    注意:我尝试单独使用Busy,但有时回复太快,并且在对象准备好之前尝试执行下一条指令。

    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()
    }
    

    【讨论】:

    • Stack Overflow 再次拯救了这一天。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多