为什么IWebBrowser2在DOM更改后不刷新?

11

我在我的Win32 C++应用程序的对话框中嵌入了一个Web浏览器(没有MFC、ATL等),并最初从包含一些HTML代码的字符串设置文档内容。这个HTML被正确地渲染出来。当“文档完成”事件发生时,我通过将文本节点附加到BODY元素来操作DOM。

问题在于,尽管在BODY元素的接口上调用IHTMLElement::get_outerHTML表明文本节点存在,但浏览器内容在对话框中未改变。

我尝试调用IWebBrowser2::Refresh::InvalidateRect/::UpdateWindow,但都没有帮助。

有任何想法吗?如果需要,我可以发布我的代码部分。

此外,是否有人知道

  • 原则上,在修改DOM后是否需要触发刷新(或者它应该是自动的)
  • 当HTML文档是从字符串而不是URL加载时,IWebBrowser2::Refresh是否有意义

仍然希望有人回答这个问题......谁能帮忙呢?


刷新应该是自动的。您是否在STA线程中工作,并且正在泵送Windows消息?https://dev59.com/GnE95IYBdhLWcg3wn_j2 - Simon Mourier
2个回答

0

你应该使用静态内容进行测试,例如

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

如果弹出框显示但没有任何内容,则表示您的实现存在问题。


-2

我找到了问题 - 这是我的代码中的一个错误。在代码中有一个非常难以察觉的对IWebBrowser2::Refresh的调用,它重新加载了页面,从而使我的动态DOM更改回滚。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接