有人可以建议直接主持 MSHTML.DLL / Trident 的良好阅读材料(不是 SHDOCVW.DLL / WebBrowser )吗?我想在C ++中将它用于GUI元素,有时候是主要元素。我需要HTML渲染,JavaScript和额外的主机提供的DOM方法和属性,事件。
我的印象是,WebBrowser只添加了一个额外的层,不需要我提供任何东西,更重要的是,我必须要禁用的东西:跨页面导航,历史记录,UI,上下文菜单,注册表依赖项,泛型Active文件托管,下载等
我发现的所有文章都谈到了WebBrowser控件,即使在很多情况下都称它为MSHTML。 Microsoft文档使得很难理解什么是MSHTML以及什么是WebBrowser;例如,"Other MSHTML Interfaces"列出了IWebBrowser2,它不是MSHTML.DLL的一部分。
答案 0 :(得分:2)
MSHTML是一个Active Document服务器。 WebBrowser和Internet Explorer是Active Document主机。如果您想直接托管MSHTML,您可以实现所有自己的Active Document托管接口,例如IOleDocumentSite
或IOleInPlaceFrame
(这是常规OLE托管接口之上,可能由您选择的框架提供)。
此外,MSHTML要求其主持人实施ITargetContainer
和ITargetFrame
。这些记录很少。
此外,您可能已经知道,MSHTML不支持导航。您必须下载(或以其他方式获取)HTML内容并将其提供给对象。
由于这些原因,除了在某些有限的情况下(例如,作为无UI的HTML解析器,请参阅WalkAll示例),很难直接托管MSHTML。这就是为什么关于这个主题的信息很少而且样本很少的原因。大多数时候,这不值得麻烦。只需托管一个WebBrowser控件,将其导航到about:blank
,使用IWebBrowser2::get_Document
抓取它托管的MSHTML实例,并随意执行任何操作。