TWebBrowser和IE版本

4
当我问这个问题时,我接受了答案,因为它很有道理,所指出的文档也是正确的。
使用TWebBrowser编译相同可执行文件,在使用IE6的机器上与使用IE7的机器进行测试,行为确实如答案中所指出的那样。
现在我再次对答案提出疑问,在使用IE8的机器上,同一可执行文件被服务器识别为IE7。我编写了一个简单的rails应用程序来打印用户代理,很明显。在同一台机器上,如果我在IE中访问此rails应用程序,则会打印出以下内容:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6.5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729)

当我使用该可执行文件访问时:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; GTB6.5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729)

此外,借助我的朋友Process Monitor的一点帮助,我意识到用于实例化TWebBrowser的classid是{8856F961-340A-11D0-A96B-00C04FD705A2},在Windows注册表中具有名称“Microsoft Web Browser”并指向ieframe.dll。

现在事情变得更加奇怪了。如果我去system32/ieframe.dll并检查版本……8.0。

我真的很困惑。问题是:当我使用TWebBrowser时,究竟会使用哪个版本的ie?

谢谢。

2个回答

7
它正在使用IE8,但在IE7兼容模式下。 IE团队在2009年3月发表了博客文章,在那里他们还描述了如何获得IE8呈现而不是IE7默认值。
我还没有看到有关IE9在这里的行为方式的任何信息,因此我无法确定您是否需要不同的值来使用IE9呈现,或者是否有其他值仅表示“最新”,并且也可以获得IE8呈现。

1
IE9使用新的常量(9000和9999),其含义类似于IE8常量(8000和8888)。 - EricLaw
@EricLaw:出于好奇,你知道这些值中哪些可以用来表示“最新”的吗?例如,如果用户使用IE8,则渲染IE8,如果用户使用IE9,则渲染IE9? - Michael Madsen
非常好的问题;我前几天问了所有者,但没有得到回复。给我发邮件(ericlaw @ microsoft),我会确保回复你(还有这里!)。 - EricLaw

0

也许TWebBrowser在ControlData属性中保存了它创建时的Useragent?尝试在安装有IE8.0的计算机上删除并重新添加控件到表单中。

无论如何,这些用户代理字符串看起来非常相似。无论打印什么,它可能都是相同的IE8.0引擎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接