2013-10-30 30 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