为什么 IWebBrowser2 在 DOM 更改后不刷新?
Why doesn't IWebBrowser2 refresh after a DOM change?
A 在我的 Win32 C++ 应用程序(没有 MFC、ATL 等)的对话框中嵌入了一个 Web 浏览器,我最初从包含一些 HTML 代码的字符串中设置文档的内容。此 HTML 已正确呈现。当 "document complete" 事件发生时,我操纵 DOM,例如通过将文本节点附加到 BODY 元素。
问题在于,尽管在 BODY 元素的界面上调用 IHTMLElement::get_outerHTML
表明文本节点存在,但浏览器内容在对话框中显示为未更改。
我试过同时调用 IWebBrowser2::Refresh
和 ::InvalidateRect
/::UpdateWindow
,但都没有用。
有什么想法吗?如果需要,我可以 post 部分代码。
另外,有谁知道
- 原则上,是否需要在修改 DOM 后以某种方式触发刷新(或者应该是自动的)
- 当 HTML 文档是从字符串而不是 URL
加载时 IWebBrowser2::Refresh
是否有意义
仍然希望得到这个问题的答案...有人吗?
您应该使用静态内容对其进行测试,例如
<html>
<head></head>
<body>
Hello World
<script>
alert("a");
</script>
</body>
</html>
如果显示了警告框但没有显示任何内容,则表明您的实现有问题。
我发现了问题 - 这是我代码中的错误。在重新加载页面的代码中对 IWebBrowser2::Refresh 的调用非常模糊,因此将我的动态更改还原为 DOM.
A 在我的 Win32 C++ 应用程序(没有 MFC、ATL 等)的对话框中嵌入了一个 Web 浏览器,我最初从包含一些 HTML 代码的字符串中设置文档的内容。此 HTML 已正确呈现。当 "document complete" 事件发生时,我操纵 DOM,例如通过将文本节点附加到 BODY 元素。
问题在于,尽管在 BODY 元素的界面上调用 IHTMLElement::get_outerHTML
表明文本节点存在,但浏览器内容在对话框中显示为未更改。
我试过同时调用 IWebBrowser2::Refresh
和 ::InvalidateRect
/::UpdateWindow
,但都没有用。
有什么想法吗?如果需要,我可以 post 部分代码。
另外,有谁知道
- 原则上,是否需要在修改 DOM 后以某种方式触发刷新(或者应该是自动的)
- 当 HTML 文档是从字符串而不是 URL 加载时
IWebBrowser2::Refresh
是否有意义
仍然希望得到这个问题的答案...有人吗?
您应该使用静态内容对其进行测试,例如
<html>
<head></head>
<body>
Hello World
<script>
alert("a");
</script>
</body>
</html>
如果显示了警告框但没有显示任何内容,则表明您的实现有问题。
我发现了问题 - 这是我代码中的错误。在重新加载页面的代码中对 IWebBrowser2::Refresh 的调用非常模糊,因此将我的动态更改还原为 DOM.