【问题标题】:TWebBrowser and IE versionTWebBrowser 和 IE 版本
【发布时间】:2023-03-15 10:01:01
【问题描述】:

当我问this question 时,我接受了答案,因为它说得通,并且指出的文档是正确的。

使用 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?

谢谢。

【问题讨论】:

    标签: windows delphi internet-explorer delphi-7


    【解决方案1】:

    它使用的是 IE8,但在 IE7 兼容模式下。 The IE team blogged about this 早在 2009 年 3 月,他们还描述了如何获得 IE8 渲染而不是 IE7 默认渲染。

    我还没有看到任何关于 IE9 在这里的表现,所以我不能说你是否需要一个不同的值来使用 IE9 渲染,或者是否有一些其他值只是意味着“最新”并获得 IE8渲染也是如此。

    【讨论】:

    • IE9 使用新的常量(9000 和 9999),其含义类似于 IE8 常量(8000 和 8888)
    • @EricLaw:出于好奇,您知道这些值是否可以用来表示“最新”吗?即,如果用户有 IE8,则 IE8 呈现,如果用户有 IE9,则呈现 IE9?
    • 很好的问题;前几天我问了老板,没有回音。给我发邮件(ericlaw @ microsoft),我会确保回复你(和这里!)。
    【解决方案2】:

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

    在任何情况下,这些用户代理字符串看起来都非常相似。可能是同一个IE8.0引擎,不管打印什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多