0

任何人都可以建议直接托管MSHTML.DLL/Trident(不是SHDOCVW.DLL/WebBrowser)的良好阅读材料吗?我想将它用于 C++ 中的 GUI 元素,有时是主要元素。我需要 HTML 渲染、带有额外主机提供的 DOM 方法和属性的 JavaScript、事件。

我的印象是,WebBrowser 只是添加了一个额外的层,提供了我不需要的任何东西,除此之外,我必须努力禁用的东西:跨页导航、历史记录、UI、上下文菜单、注册表依赖项、通用 Active Document 托管,下载等

我找到的所有文章都在谈论 WebBrowser 控件,即使在很多情况下都称它为 MSHTML。微软的文档让人很难理解什么是 MSHTML 和什么是 WebBrowser;例如,“其他 MSHTML 接口”列出了 IWebBrowser2,它不是 MSHTML.DLL 的一部分。

4

1 回答 1

2

MSHTML 是一个活动文档服务器。WebBrowser 和 Internet Explorer 是 Active Document 主机。如果您想直接托管 MSHTML,您可以实现所有您自己的 Active Document 托管接口,例如IOleDocumentSiteIOleInPlaceFrame(这是在常规 OLE 托管接口之上,可能由您选择的框架提供)。

此外,MSHTML 要求其宿主实现ITargetContainerITargetFrame. 这些记录很少。

此外,您可能已经知道,MSHTML 不支持导航。您必须下载(或以其他方式获取)HTML 内容并将其提供给对象。

由于这些原因,很难直接托管 MSHTML,除非在某些有限的情况下(例如,作为无 UI 的 HTML 解析器,请参阅WalkAll示例)。这就是为什么关于该主题的信息如此之少和样本如此之少的原因。大多数时候,这不值得麻烦。只需托管一个 WebBrowser 控件,将它导航到about:blank,获取它托管的 MSHTML 实例IWebBrowser2::get_Document,然后用它做任何你想做的事情。

于 2013-10-30T16:23:00.380 回答