0

Refreshユーザーがコンテキスト メニューから選択したかどうかを検出するにはどうすればよいですか? ユーザーがメソッドを選択しても、NavigateComplete2メソッドは呼び出されません。

さらに重要なことは、独自のカスタム ユーザー エージェントを設定する方法の 1 つは、イベント メソッドをフックするBeforeNavigate2ことであり、ユーザーが [更新] を選択したか、新しい URL をナビゲートしたかを知る必要があります。

任意の洞察をいただければ幸いです。

これは、が選択され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"
    }
}
4

1 に答える 1

1

更新 (または新しいページ) が開始されたかどうかを確認する 1 つの方法は、if/while (A_Cursor = "AppStarting") を使用してマウスの状態を監視することです (Chrome では、他のブラウザーについてはわかりません)。これは、マウス カーソルが砂時計になった場合に当てはまります。

以前の URL と新しい URL を比較すると、これが新しいリクエストか更新かがわかります: ControlGetText CurrentURL, Chrome_OmniboxView1, Chrome

お役に立てれば。

于 2012-12-01T12:26:04.597 に答える