我正在尝试使用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内容区域几乎可以肯定地显示为空白。
继续单击该按钮,红色文本会间歇性地随机出现,每十次点击中就会出现一遍。
那我的代码怎么了?
答案 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文档时,我需要打开+编写+关闭。
现在它可以可靠地工作了。