У меня есть диалоговое окно MFC, где я добавил управление веб-браузером (который заключает в капсулу Internet Explorer
Engine.) Целью следующего кода является (временно) удалить полосы прокрутки и границы окна из этого элемента управления (чтобы вызвать IViewObject :: Draw.)
Итак, я делаю:
//'m_browser' = is a web browser control of type `CExplorer1`
IDispatch* pHtmlDoc = m_browser.get_Document();
CComPtr<IHTMLDocument2> pHtmlDocument2;
pHtmlDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDocument2);
CComPtr<IHTMLElement> pBody;
pHtmlDocument2->get_body(&pBody);
CComPtr<IHTMLStyle> pStyle;
pBody->get_style(&pStyle);
//Remove borders
pStyle->put_borderStyle(CComBSTR("none"));
//Remove scrollbars
pBody->setAttribute(CComBSTR(L"scroll"), CComVariant(L"no"));
Этот подход работает, если я определю HTML, который отображается в веб-элементе управления, как:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
но если я определю это как HTML5:
<!DOCTYPE HTML>
код выше ничего не делает.
Любая идея, что я должен изменить, чтобы он работал с разметкой HTML5?
я читал этот статья, где говорится:
По умолчанию веб-элемент управления браузера постоянно зависает в режиме рендеринга IE 7. Несмотря на то, что сейчас у нас до IE 11 и достаточно HTML5-совместимый браузер, элемент управления Web Browser всегда использует механизм рендеринга IE 7 по умолчанию. Это связано с тем, что в исходных версиях элемента управления ActiveX этот режим использовался, и для обратной совместимости элемент управления продолжает использовать этот устаревший и недружественный к HTML5 вариант по умолчанию.
Обойти это можно добавить
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
в <head>
HTML, заставляя использовать новейший механизм рендеринга IE и, таким образом, делая его «совместимым» со страницами HTML5.
Других решений пока нет …