【发布时间】:2014-10-15 15:36:46
【问题描述】:
我正在尝试在 Win8.1/IE11 上获得一个 MFC/C++ 应用程序,该应用程序带有一个嵌入式浏览器窗口,以edge(最新标准)模式呈现。窗口的内容在本地提供(即不是来自网站)。
在头部使用<!DOCTYPE html> 和<meta http-equiv="X-UA-Compatible" content="IE=edge">(第一件事)让我获得IE8 渲染(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,它按预期调用,我返回我自己的应用程序密钥路径(几乎与微软的相同,即Software\MyCompany\Internet Explorer(也尝试了Software\MyCompany)。我已将注册表设置放在该路径下,例如我的Software\MyCompany\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyProcess.exe,但它似乎忽略了它。我也尝试了一些不同的注册表路径选项,但我没有想法。哦,我也尝试使用GetOptionKeyPath,但没有成功。
此外,我还尝试了 HookRegOpenKeyExW hack 在 another question 中建议的方法,但现在显然还有几个额外的存根库兼容性层,这使得它更加笨拙。
有人知道吗?谢谢
【问题讨论】:
标签: internet-explorer webbrowser-control