2013-10-30 26 views
0

任何人都可以建议好的阅读材料托管MSHTML.DLL/Trident直接(不是SHDOCVW.DLL/WebBrowser)?我想将它用于C++中的GUI元素,有时是主要的元素。我需要HTML渲染,JavaScript和额外的主机提供的DOM方法和属性,事件。我的印象是,WebBrowser只是增加了一个额外的图层,我不需要任何东西,除此之外,我必须努力禁用它们:跨页面导航,历史记录,用户界面,上下文菜单,注册表依赖项,通用Active Document托管,下载等直接读取MSHTML.DLL(不是WebBrowser)的资料?

我发现的所有文章都谈论了WebBrowser控件,即使在很多情况下调用MSHTML。微软的文档很难理解什么是MSHTML和什么是WebBrowser;例如,"Other MSHTML Interfaces"列出了IWebBrowser2,它不属于MSHTML.DLL的一部分。

+0

Mshtml只提供HTML解析器和DOM。你仍然需要把它放到屏幕上来实际看*网页。这就是“无用的”shdocvw所做的。自己实现它是非常不切实际的。你不能在这里要求非现场资源。 –

+0

您是否阅读过[Hosting and Reuse](http://msdn.microsoft.com/zh-cn/library/aa752038(v = vs.85).aspx),[Reusing MSHTML](http://msdn.microsoft.com/zh-cn/ .com/en-us/library/bb508516(v = vs.85).aspx)等等? – CodeCaster

+0

@HansPassant,根据[MS docs](http://msdn.microsoft.com/en-us/library/aa752038(v = vs.85).aspx),使用WebBrowser更好,因为它提供了“放置导航,历史......它封装了浏览器的扩展功能“,而使用MSHTML”您可以使用HTML和CSS解析器和渲染器,但无法利用浏览器的其他功能“。 – crackers

回答

2

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

此外,MSHTML要求其主机实施ITargetContainerITargetFrame。这些记录很差。

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

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

+0

谢谢。事实上,MSHTML/Trident确实实现了一些我认为WebBrowser所做的事情,例如上下文菜单。我只需要玩它。 – crackers