IHTMLDocument2 :: get_body在用于IE 11的CHtmlView中失败

时间:2014-02-25 19:05:24

标签: c++ internet-explorer com

我们遇到了一个简单但关键的问题: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),那么它会再次运行。

帮助!

1 个答案:

答案 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.