覆盖IE渲染模式嵌入WebBrowser控件

时间:2014-08-21 21:03:57

标签: internet-explorer webbrowser-control

我正在尝试在Win8.1 / IE11上使用嵌入式浏览器窗口获取MFC / C ++应用程序,以便在edge(最新标准)模式下呈现。窗口的内容在本地提供(即不是从网站提供)。

在头部使用<!DOCTYPE html><meta http-equiv="X-UA-Compatible" content="IE=edge">(第一件事)让我获得IE8渲染(IE5只有IE5,IE7只有DOCTYPE)。

我知道用于将您自己的进程名称添加到HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer的注册表设置Main\FeatureControl\FEATURE_BROWSER_EMULATION ...这实际上有效并且在IE11中呈现一个主要问题:当我设置该功能时,应用程序恰好被命名为相同中断的Microsoft应用程序!似乎注册表设置功能也不允许进程的完整路径名。我知道,重命名这个过程......但出于各种历史原因,我不能轻易做到这一点。所以......

我已经扩展了处理程序class MyDocHandler : public IDocHostUIHandler2, public IOleClientSite {...}并在导航发生之前通过pOleObject->SetClientSite( pMyDocHandler );使用它。我实现了IDocHostUIHandler2::GetOverrideKeyPath,它被按预期调用,我返回自己的应用程序密钥路径(几乎与Microsoft的相同,即Software\MyCompany\Internet Explorer代替Software\MyCompany。我已经放了注册表在那条路径下设置,例如我的Software\MyCompany\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyProcess.exe,但它似乎忽略了它。我已经尝试了一些不同的注册表路径选项,但我没有想法。哦,我也试过没有成功使用GetOptionKeyPath

此外,我已经尝试了another question中建议的HookRegOpenKeyExW hack,但现在显然还有一些额外的存根库兼容性层,使其更加笨拙。

任何人都有一些见解?谢谢

1 个答案:

答案 0 :(得分:1)

  

此外,我已经尝试了HookRegOpenKeyExW hack   在另一个问题中建议,但现在显然有几个   额外的存根库兼容性层使得更多   笨重。

作为替代方案,您可能需要按照RegOverridePredefKey所述here进行尝试。