Autohotkey + IE WB.document.write()仅工作两次,为什么?

时间:2019-03-02 09:39:42

标签: activex autohotkey

我正在尝试使用IE ActiveX控件动态更新Autohotkey GUI,但是遇到奇怪的行为。请帮忙。

; ie-refresh.ahk on Autohotkey 1.1.24
global WB

Gui, Font, s9 cBlack, Tahoma
Gui, Add, Text, , % "Click button to see html content."
Gui, Add, ActiveX, xm w120 h30 vWB, Shell.Explorer
Gui, Add, Button, xm gBtnClicked, % "Update html text"
Gui Show
return

BtnClicked()
{
    html_tmpl = 
( Ltrim Join
<!DOCTYPE html>
<html>
    <head>
        <style>
            body { 
                margin: 0px;
                color: red;
            }
        </style>
    </head>
    <body>
Count: {}
    </body>
</html>
)
    static snum := 0
    snum++

    html_code := Format(html_tmpl, snum)

    WB.Navigate("about:blank")
    WB.document.write(html_code)

}

GuiEscape:
GuiClose:
ExitApp

当我单击按钮时,IE内容会更新,但它只会更新两次

IE ActiveX updating

在第三次单击按钮时,IE内容区域几乎可以肯定地显示为空白

enter image description here

继续单击该按钮,红色文本会间歇性地随机出现,每十次点击中就会出现一遍。

那我的代码怎么了?

2 个答案:

答案 0 :(得分:2)

问题似乎出在第二次调用Navigation。

我认为WB.Stop()可以解决问题,但之后您发现WB.Navigate不足以清洁屏幕,所以...

最明智的选择是将WB.Navigate放在gui-add之后(或之后的某处),然后使用WB.Refresh()。

出于参考,一些WebBrowser Control文档here

答案 1 :(得分:1)

尽管我无法解释问题中的怪异行为,但我设法找到了解决问题的方法。

使用以下代码:

; ie-refresh.ahk on Autohotkey 1.1.24
global WB

Gui, Font, s9 cBlack, Tahoma
Gui, Add, Text, , % "Click button to see html content."
Gui, Add, ActiveX, xm w120 h30 vWB, Shell.Explorer
Gui, Add, Button, xm gBtnClicked, % "Update html text"
WB.Navigate("about:blank")
Gui Show
return

BtnClicked()
{
    html_tmpl = 
( Ltrim Join
<!DOCTYPE html>
<html>
    <head>
        <style>
            body { 
                margin: 0px;
                color: red;
            }
        </style>
    </head>
    <body>
Count: {}
    </body>
</html>
)
    static snum := 0
    snum++

    html_code := Format(html_tmpl, snum)

    WB.document.open()
    WB.document.write(html_code)
    WB.document.close()
}

GuiEscape:
GuiClose:
ExitApp

首先,仅拨打一次WB.navigate("about:blank")

第二,当我需要更新整个html文档时,我需要打开+编写+关闭。

现在它可以可靠地工作了。