2015-01-17 5 views
11

У вас есть веб-браузер, встроенный в диалог моего приложения Win32 C++ (без MFC, ATL и т. Д.), И я изначально установил содержимое документа из строки, содержащей некоторый код HTML. Этот HTML отображается правильно. Когда происходит событие «завершение документа», я манипулирую DOM, например. добавив текстовый узел к элементу BODY.Почему IWebBrowser2 не обновляется после изменения DOM?

Проблема заключается в том, что хотя вызов IHTMLElement::get_outerHTML на интерфейсе элемента BODY указывает, что текстовый узел присутствует, содержимое браузера в диалоговом окне остается неизменным.

Я пробовал звонить как IWebBrowser2::Refresh, так и ::InvalidateRect/::UpdateWindow, но ни один из них не помогает.

Любые идеи? При необходимости я могу разместить части своего кода.

Кроме того, кто-нибудь знает

  • в принципе, обновления, нужно ли, чтобы быть каким-то образом срабатывает после изменения DOM (или он должен быть автоматическим) делает
  • ли IWebBrowser2::Refresh смысл, когда HTML документ загруженный из строки, а не URL-адрес

Все еще надеемся на ответ на этот вопрос ... кто-нибудь?

+0

Обновление должно быть автоматическим. Вы работаете в потоке STA и перекачиваете ли вы сообщения Windows? http://stackoverflow.com/questions/2222365/what-is-a-message-pump –

ответ

-2

Я нашел проблему - это была ошибка в моем коде. Был очень неясный вызов IWebBrowser2 :: Refresh в коде, который перезагружал страницу, тем самым возвращая мои динамические изменения в DOM.

0

Вы должны проверить его с помощью статического контента, например

<html> 
<head></head> 
<body> 
Hello World 
<script> 
alert("a"); 
</script> 
</body> 
</html> 

Если окно предупреждения отображается, но без чего-либо, то этот знак вы РЕАЛИЗАЦИЯ имеет проблему.