确定用户是否在WebBrowser控件中选择了“刷新”

时间:2012-11-27 17:55:40

标签: webbrowser-control autohotkey beforenavigate2

如何通过上下文菜单检测用户是否选择了Refresh?当用户选择它时,不会调用NavigateComplete2方法。

更重要的是,要设置自己的自定义用户代理,一种方法是挂钩BeforeNavigate2事件方法,有必要知道用户是选择了刷新还是导航新网址。

任何见解都将受到赞赏。

这表明在选择NavigateComplete2时不会触发Refresh方法。

oWB := new WebBrowserControl("http://stackoverflow.com")
Class WebBrowserControl
{

    __New(strURL) { 
        static WB
        Gui, New, Resize 
        Gui, Add, ActiveX, vWB w780 h580, Shell.Explorer  
        Gui, show, w800 h600

        ComObjConnect(WB, this) 

        WB.Navigate(strURL)
        Loop
           Sleep 10
        Until (WB.readyState=4 && WB.document.readyState="complete" && !WB.busy)    
        Return
        GuiClose:
        ExitApp
    }

    NavigateComplete2(oParams*) {
        ComObjError(false)  
        WB := oParams[1]
        msgbox, 64, Navigate Completed
            , % "WB.locationURL :`t`t" WB.locationURL "`n"
            . "WB.Document.URL:`t`t" WB.Document.URL "`n"
            . "windowlocation.href:`t" WB.document.parentWindow.location.href
    }

    BeforeNavigate2(oParams*) {

        WB := oParams[8]
        strURL := oParams[2]        

        msgbox % "Loading URL:`t`t" strURL "`n"
            . "WB.locationURL :`t`t" WB.locationURL "`n"
            . "WB.Document.URL:`t`t" WB.Document.URL "`n"
            . "location.href:`t`t" WB.document.parentWindow.location.href "`n"
            . "WB.ReadyState:`t`t" WB.readystate "`n"
            . "WB.document.readystate:`t" WB.document.readystate "`n"
            . "WB.Busy:`t`t`t" WB.Busy "`n"
    }
}

1 个答案:

答案 0 :(得分:1)

查看是否已启动刷新(或新页面)的一种方法是使用以下命令监控鼠标状态(在Chrome中,不确定其他浏览器):if / while(A_Cursor =“AppStarting”)。当鼠标光标变成沙漏时,就是这样。

比较上一个和新网址会告诉您这是新请求还是刷新:ControlGetText CurrentURL,Chrome_OmniboxView1,Chrome

希望这有帮助。