是否可以在AutoHotkey中随时执行WebBrowser控件中加载的JavaScript函数?

时间:2012-11-28 18:54:54

标签: webbrowser-control autohotkey

我认为InvokeScript可能有效,但事实并非如此。

strHTML =
(
<!DOCTYPE html>
<html>
    <head>
        <script> function displayDate() { document.getElementById("demo").innerHTML=Date(); }</script>
    </head>
    <body>
        <p id="demo" onclick="displayDate()">This is a paragraph. Click here.</p>
    </body>
</html> 
)

new WebBrowser(strHTML)

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

        WB.Navigate("about:blank")
        Loop
           Sleep 10
        Until (WB.readyState=4 && WB.document.readyState="complete" && !WB.busy)    

        WB.Document.Write(strHtml)
        ; WB.Document.Close()

        WB.document.InvokeScript("displayDate")
        ; WB.document.parentWindow.document.InvokeScript("displayDate") ; does not work
        return this

        GuiClose:
        ExitApp
    }
}

1 个答案:

答案 0 :(得分:2)

至少有两种方法可以调用该函数:

WB.document.parentWindow.execScript("displayDate()")
WB.document.parentWindow.displayDate()

脚本中的所有全局函数都可用作window对象的方法。

您链接的文章中提到的WebBrowser控件是.NET Framework的一部分,与您正在使用的WebBrowser控件不同。这就是尝试调用InvokeScript引发“未知名称”错误消息的原因。