Чтение материала на хостинге MSHTML.DLL напрямую (не WebBrowser)?

Кто-нибудь может предложить хороший материал для чтения на хостинге MSHTML.DLL/Trident напрямую (не SHDOCVW.DLL / WebBrowser)? Я хочу использовать его для элементов графического интерфейса, иногда основных, в C++. Мне нужен рендеринг HTML, JavaScript с дополнительными хост-методами и свойствами DOM, события.

У меня сложилось впечатление, что WebBrowser просто добавляет дополнительный слой, не предоставляя ничего, что мне нужно, и, более того, вещи, которые мне придется поработать, чтобы отключить: межстраничную навигацию, историю, пользовательский интерфейс, контекстные меню, зависимости реестра, общий хостинг активных документов, загрузка и т. д.

Все статьи, которые я нахожу, рассказывают об элементе управления WebBrowser, даже если во многих случаях он называется MSHTML. Документация Microsoft затрудняет понимание того, что такое MSHTML и что такое WebBrowser; например, "Другие интерфейсы MSHTML" перечисляет IWebBrowser2, который, помимо прочего, не является частью MSHTML.DLL.

1 ответ

MSHTML является сервером активных документов. WebBrowser и Internet Explorer являются хостами активных документов. Если вы хотите разместить MSHTML напрямую, вы можете реализовать все свои собственные интерфейсы хостинга активных документов, например IOleDocumentSite или же IOleInPlaceFrame (это поверх обычных интерфейсов хостинга OLE, которые могут быть предоставлены выбранной вами средой).

Кроме того, MSHTML требует своего хоста для реализации ITargetContainer а также ITargetFrame, Они плохо документированы.

Кроме того, как вы, наверное, уже знаете, MSHTML не поддерживает навигацию. Вы должны загрузить (или иным образом получить) контент HTML и передать его объекту.

По этим причинам трудно непосредственно разместить MSHTML, за исключением определенных ограниченных сценариев (например, в качестве анализатора HTML без пользовательского интерфейса, см. Пример WalkAll). Вот почему так мало информации и так мало примеров по теме. В большинстве случаев это не стоит проблем. Просто разместите элемент управления WebBrowser, перейдите к нему about:blankВозьмите экземпляр MSHTML, в котором он находится IWebBrowser2::get_Documentи делай с ней что хочешь.

Другие вопросы по тегам