Управление веб-браузером - отображение текста с использованием «записи»

используя интерфейс IWebBrowser2 для визуализации страницы из строки HTML, созданной во время выполнения. Я написал метод (пустьs называет его DisplayHtmlString), который принимает строку HTML и отображает ее, как показано на рисункеэтот пример, Метод также вызывает Navigate2 с "о: пусто» во-первых, чтобы убедиться, что документ присутствует, и он также вызывает close после вызова write.

При первом вызове DisplayHtmlString страница всегда отображается правильно, т. Е. Браузер отображает HTML в соответствии со строкой, которую я передаю. Проблема в том, что последующие вызовы иногда не работают правильно, но вместо этого отображают пустую страницу. Что может быть причиной этого?

Я обнаружил, что когда отображается пустая страница, это результат перехода к about: blank. Это было определено путем перехода к локальному файлу, который затем отображается (тогда как вместо этого должна быть показана строка HTML, из-за последующей записи / закрытия). Таким образом, вызов Navigate2 работает, в то время как вызовы для записи и закрытия иногда нет.

Я рассматривал внутренние проверки безопасности IE как возможную причину (междоменная проверка?), Но мое внутреннее чувство заключается в том, что это нет чтоздесь происходит

Мне кажется более вероятным, что это какая-то проблема синхронизации, по типу "IE не имеетне закончил рендеринг еще до того, как произойдет следующий вызов DisplayHtmlString ", Мой код изначально непроверить браузерсостояние готовности (потому что пример нет). Я добавил экспериментальный цикл ожидания с вызовом get_readyState и заметил, что состояние никогда не выходит за рамкизагрузка» прежде чем вернуться из метода - вероятно, потому что рендеринг асинхронный (?). Я также заметил, что когда последовательные вызовы DisplayHtmlString работают правильно, программаОсновной цикл обработки сообщений запущен (что дает Windows возможность обрабатывать сообщения), что не имеет место в сценарии, когда происходит сбой последовательных вызовов DisplayHtmlString.

Так что я'Я уверен, что мне нужно обеспечить правильную синхронизацию здесь, но как? Я замечаю тамs метод с именем onreadystatechange, но не имеетЯ еще не экспериментировал с этим из-за множества других вещей, которые я пытался ощутить в темноте. Может ли это быть решением, и как правильно его использовать? Или, в качестве альтернативы, я должен просто обработать цикл сообщений внутри DisplayHtmlString, пока состояние готовности не изменится на "завершить "?

ОБНОВЛЕНИЕ: Добавлена обработка цикла сообщений в DisplayHtmlString. При первом вызове (который работает) состояние готовности достигает "интерактивный», но не дальше (что неКажется, это проблема). В последующем вызове (когда он не работает) состояние готовности остается на "загрузка»даже если цикл обработки сообщений обработан.

Ответы на вопрос(1)

Ваш ответ на вопрос