【问题标题】:Overriding IE rendering mode embedded WebBrowser control覆盖 IE 渲染模式嵌入 WebBrowser 控件
【发布时间】: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


    【解决方案1】:

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

    作为替代方案,您可能想尝试RegOverridePredefKey,如here 所述。

    【讨论】:

    • 感谢您的回答。太糟糕了,没有该 API 的 RegOverride**Specific**Key 版本,而不是整个预定义的根密钥。我试过了,它似乎确实有效,但我担心一些事情......一个问题是覆盖 IE 的一些其他行为,如下载位置、自定义安全设置等。 IE 转储了一整套默认设置注册表项到我的重定向位置。另一个问题是其他注册表交互现在被重定向(例如启动设置、其他 COM 组件等)。不愿意尝试使整个 CURRENT_USER 密钥树保持最新。
    • @mark,如果你先对重定向位置的原始密钥进行深层复制,我想你会没事的。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2013-08-31
    • 2023-03-03
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多