如何获取两个IWebBrowser2对象来模拟不同的Internet Explorer版本?

时间:2017-01-06 17:34:08

标签: c++ internet-explorer mfc iwebbrowser2

我正在使用MFC应用程序(C ++)。我们在一些对话框中使用嵌入式浏览器--IWebBrowser2 ActiveX对象。默认情况下,它们模拟IE版本7(出于兼容性原因)。我们需要一个更新的版本才能显示现代网页,因此我们通过设置注册表项FEATURE_BROWSER_EMULATION来更改IE版本。 (参见this blogpost或其他有关该主题的SO问题。)

但是当我们改用嵌入式浏览器的新IE时,我们使用崩溃的第三方模块。事实证明,它也使用(隐藏的)IWebBrowser2对象,它无法处理现代IE。 (现在不能更新第三方模块。)

第三方模块并不常用,因此我们尝试通过更改FEATURE_BROWSER_EMULATION临时解决方案。但这不起作用!似乎FEATURE_BROWSER_EMULATION只读取了创建IWebBrowser2对象的第一次时间。如果你喜欢这样:

 (1)  Set FEATURE_BROWSER_EMULATION to 7000 (=IE7)
 (2)  Create a dialog box with an IWebBrowser2 control (and navigate to "thismachine.info")
 (3)  Close the dialog box
 (4)  Set FEATURE_BROWSER_EMULATION to 11001 (=IE11)
 (5)  Create a dialog box with an IWebBrowser2 control (and navigate to "thismachine.info")

两者 IWebBrowser2控件将是IE7! (如果你交换7000/11001都将是IE11。)尽管整个对话框,浏览器控件和第一个IWebBrowser2对象在步骤(3)中被释放。

有没有办法让两个IWebBrowser2对象在同一个进程中使用不同的IE版本?造成这种情况的原因是 - 在COM处理中是否存在一些“注册表缓存”,导致新的注册表值被忽略? (如果是这样,有没有办法清除缓存?)或者第一个IWebBrowser2对象的某些部分是否未被释放? (如果有,有办法吗?)或者有人有不同的方法/建议吗?

0 个答案:

没有答案