html - 构建 HtmlElement 对象树

标签 html browser webbrowser-control dom

我在 C# 桌面应用程序中使用 MSIE WebBrowser 控件,并且正在寻找一种方法来构建和维护此控件之外的 HtmlElement 对象树。我试图在多个复杂页面之间快速切换,而不会产生每次都重新解析 HTML 的开销(而且我不想维护根据需要显示/隐藏的多个控件)。 我发现 a) 我只能通过控件的 HtmlDocument 创建 HtmlElement 对象和 b) 一旦我从控件的 HtmlDocument,它“消失了”,即使我一直保持对根元素的强引用。 我该怎么做?

附言如果其他浏览器控件(例如 Gecko)允许我完成上述任务,我愿意考虑它们。

最佳答案

这样就可以了

// On screen webbrowser control
webBrowserControl.Navigate("about:blank");
webBrowserControl.Document.Write("<div id=\"div1\">This will change</div>");
var elementToReplace = webBrowserControl.Document.GetElementById("div1");
var nodeToReplace = elementToReplace.DomElement as mshtml.IHTMLDOMNode;

// In memory webbrowser control to load fragement into
// It needs this base object as it is a COM control
var webBrowserFragement = new WebBrowser();
webBrowserFragement.Navigate("about:blank");
webBrowserFragement.Document.Write("<div id=\"div1\">Hello World!</div>");
var elementReplacement = webBrowserFragement.Document.GetElementById("div1");
var nodeReplacement = elementReplacement.DomElement as mshtml.IHTMLDOMNode;

// The magic happens here!
nodeToReplace.replaceNode(nodeReplacement);

我怀疑这会提高性能,因为文本渲染器速度很快,如果您有一个大页面隐藏了 div,或者其他对象的内存中有多个 div,消耗的内存仍然是相同的?

关于html - 构建 HtmlElement 对象树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/631955/

相关文章:

javascript - 让我的 JQuery 与 IE 配合使用

performance - Web 浏览器性能规则 "only 2 requests in parallel per hostname"是否仍然正确?

html - CSS3 奇怪的渲染行为

c# - 想获取浏览器鼠标悬停的坐标,Document为空时点击

javascript - 当我添加更多下拉列表时,jQuery 不起作用

html - CSS 文本选取框问题

html - 如何相对于高度不同的顶部元素移动元素

javascript - 如何修复浏览器 blob 下载从最大化 RAM 的问题?

c# - WebBrowser 控制文档在 iframe 和 Javascript 完成后完成

c# - WebBrowser 文档转换无效