我们遇到了一个简单但关键的问题:IHTMLDocument2 :: get_body适用于IE7的嵌入式浏览器(CHtmlView),但不适用于IE11。我们真的想开始使用更新的版本,但现在这是一个杀手。
我们使用Visual Studio 2010. Native(非托管)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
对于我们的.exe,为11000,然后elt == NULL(因此无法通过body.IsValid()测试)
如果我们没有设置注册表项,或者将密钥设置为7000(因此浏览器控件是IE7),那么它会再次运行。
帮助!
答案 0 :(得分:1)
Robert Aldwinckle在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.