Мы столкнулись с простой, но критической проблемой: IHTMLDocument2 :: get_body работает в нашем встроенном браузере (CHtmlView) для IE7, но не в IE11. Мы действительно хотим начать использовать более новую версию, но сейчас это убийца.
Мы используем Visual Studio 2010. Нативный (неуправляемый) C++. Проблема возникает как в 32, так и в 64-битных сборках. Я не знаю, где это началось с ошибкой (IE8? IE9? IE10?). OnNavigateComplete2 уволил, прежде чем мы попытаемся вызвать эту функцию.
Вот наш код, который долгое время работал на нас:
ComPtr<IHTMLTxtRange> CHighlightHTML::GetRange(ComPtr<IHTMLDocument2> document)
{
ComPtr<IHTMLElement> elt;
ComPtr<IHTMLBodyElement> body;
if( SUCCEEDED(document->get_body(&elt.ReleaseGetValue())) )
body = elt;
if( body.IsValid() )
{
// Create a range from the entire body element.
ComPtr<IHTMLTxtRange> range;
CHECK_COM(body, createTextRange(&range.ReleaseGetValue()));
return range;
}
}
Но когда мы устанавливаем ключ реестра: HKCU/Software/Microsoft/Internet Explorer/Main/FeatureControl/FEATURE_BROWSER_EMULATION
до 11000 для нашего.exe, тогда elt == NULL (так терпит неудачу в тесте body.IsValid())
Если мы не установили ключ реестра или не установили ключ в 7000 (так что управление браузером - IE7), то он снова работает.
Помогите!
Роберт Алдвинкл дал мне ответ на форуме msdn. Мне нужно было установить значение реестра 11001 вместо 11000:
11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the !DOCTYPE directive.
11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.