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

Why doesn't IWebBrowser2 refresh after a DOM change?

本文关键字:刷新 IWebBrowser2 DOM 为什么      更新时间:2023-10-16

A 在我的 Win32 C++ 应用程序的对话框中嵌入了一个 Web 浏览器(没有 MFC、ATL 等),我最初从包含一些 HTML 代码的字符串中设置文档的内容。此 HTML 已正确呈现。当"文档完成"事件发生时,作 DOM,例如通过将文本节点附加到 BODY 元素。

问题在于,尽管在 BODY 元素的界面上调用IHTMLElement::get_outerHTML表示存在文本节点,但浏览器内容在对话框中显示不变。

我试过打电话给IWebBrowser2::Refresh::InvalidateRect/::UpdateWindow,但都没有帮助。

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

另外,有谁知道

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

仍然希望得到这个问题的答案...任何人?

你应该使用静态内容来测试它,例如

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

如果显示警报框但没有任何内容,则此标记您的实现有问题。

我发现了问题 - 这是我代码中的一个错误。在重新加载页面的代码中,有一个非常晦涩的调用 IWebBrowser2::Refresh,从而将我的动态更改还原到 DOM。