当我问this question时,我接受了答案,因为它有意义并且文档指出是正确的。
使用IE6测试一台机器与IE7使用相同的编译可执行文件使用TWebBrowser进行测试时,行为确实如回答中所述。
现在我再次回答问题,在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版本吗?感谢。
答案 0 :(得分:7)
它使用IE8,但在IE7兼容模式下。 The IE team blogged about this早在2009年3月,他们还描述了如何获得IE8渲染而不是IE7默认渲染。
我还没有看到IE9在这里的表现如何,所以我不能说你是否需要一个不同的值来使用IE9渲染,或者是否有一些其他值只是意味着“最新”并获得IE8渲染。
答案 1 :(得分:0)
也许TWebBrowser在ControlData属性中创建了它在创建时使用的Useragent?尝试在安装了IE8.0的计算机上删除并重新添加控件到表单。
无论如何,这些用户代理字符串看起来非常相似。它可能是相同的IE8.0引擎,无论它打印什么。