Как ждать завершения операции DOM? - PullRequest
1 голос
/ 28 февраля 2012

Мне нужно сохранить часть старого проекта Windows VB6 (поэтому не говорите мне перенести его на VB.NET).Эта программа встраивает хорошо известный элемент управления веб-браузером (IE), в который загружает локальные HTML-файлы (содержащие различную статистику, но это не имеет значения).Зная, что нам не нужна полоса прокрутки в представлении веб-браузера (даже если HTML-страница длиннее окна веб-браузера, нам просто нужно посмотреть, что находится сверху), мы управляем DOM для события DocumentComplete следующим образом:

Private Sub wb_DocumentComplete(ByVal pDisp As Object, URL As Variant)
 wb.Document.documentElement.Style.overflow = "hidden"
 ProcessWithDStats
End Sub

Все звуки правильные, и вертикальная полоса прокрутки хорошо исчезает, но теперь мне нужно добавить некоторые вещи в подпрограмму ProcessWithDStats (большая подпрограмма, вызывающая множество функций), которые должны быть уверены, что предыдущая операция DOM полностью завершена(Я имею в виду: полоса прокрутки скрыта, и ее содержимое повторно выровнено в соответствии с этой новой шириной без полосы прокрутки).

Итак, как это сделать?

В настоящее время ProcessWithDStats выполняется перед DOMуправление действительно завершено!

До сих пор вот мои попытки:

  • Я пытался добавить тестирование полосы прокрутки (сравнение ширины документа и клиентской области браузера)1) между двумя строками, но это не работает: тест в порядке, но перекомпоновка текста (из-за этого изменения ширины при исчезновении полосы прокрутки) не имеетt достаточно времени для применения до включения ProcessWithDStats.

  • Я пытался Sleep (), но он блокирует всю программу (включая рендеринг веб-браузера)

Хорошо, есть ли способ ждать реального применения данного управления DOM в этом элементе управления WebBrowser?

Я имею в виду что-то вроде:

Do
 Doevents
Loop Until [DOM modification and rendering completed]

1 Ответ

0 голосов
/ 08 марта 2012

вам нужно сделать это ... как минимум.

Do
 Sleep 100
 Doevents
Loop Until wb.Busy = False And wb.ReadyState = 4

В вашей версии .Busy может называться .IsBusy, но это одно и то же.

Также,Есть дополнительные вещи, которые вы должны сделать, если вы хотите точно знать, загрузился ли браузер, прочитайте некоторые из моих предыдущих ответов, если вы хотите узнать больше, или вам нужно больше точности, чем выше, но то, что я включил для вас, предназначено дляконечно, гораздо лучшее решение, чем у вас есть.Дайте мне знать, если вам нужно, чтобы он работал на 100% веб-сайтов или только на нескольких избранных, если может быть достаточно нескольких избранных, чем этот простой метод.

Дайте мне знать, как это все равно происходит, ура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...