Autohotkey + IE WB.document.write () работает только ДВАЖДЫ, почему? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь использовать элемент управления IE ActiveX для динамического обновления графического интерфейса Autohotkey, но столкнулся со странным поведением.Пожалуйста, помогите.

; 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 голосов
/ 03 марта 2019

Хотя я не могу объяснить странное поведение в моем вопросе, мне удалось найти решение для моего требования.

Используйте следующий код:

; 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-документ, мне нужно открыть + написать + закрыть.

Теперь все работает надежно.

0 голосов
/ 03 марта 2019

Похоже, проблема связана с вызовом navigate во второй раз.

Я думал, что WB.Stop () решит проблему, но после этого вы обнаружите, что WB.Navigate недостаточно для очистки экрана.итак ...

Наиболее разумная альтернатива выглядит как установка WB.Navigate после добавления gui (или где-то после), а затем использование WB.Refresh ().

Только для ссылки,некоторая документация WebBrowser Control здесь .

...