【问题标题】:How does IE10 dev tools report compatibility view?IE10 开发工具如何报告兼容性视图?
【发布时间】:2014-12-03 09:47:32
【问题描述】:

我维护一个旧版 Web 应用程序,其中包含许多旧的怪癖模式页面和许多较新的标准模式页面。

在 IE10 中,如果我们的域名在 IE 兼容性列表中,我会收到来自 IE 的混合消息。

  • 开发工具报告页面处于浏览器模式 IE10 兼容视图。
  • 页面的外观表明它处于标准模式。
  • userAgent 说它是 MSIE 10.0、Trident/6.0(建议不兼容视图)

如果我将开发工具中的浏览器模式从 IE10 Compat View 更改为 IE10,然后返回 Compat View,我会得到:

  • 开发工具报告页面在 IE10 兼容视图中(和以前一样)
  • 页面的外观表明它处于兼容视图中。
  • userAgent 说它是 MSIE 7.0、Trident/6.0(建议它在 Compat View 中)

IE10 开发工具是否有时会歪曲浏览器模式?例如根据兼容性列表或其他标准猜测模式,当页面实际上进入标准模式时,因为 doctype 和 X-UA-Compatible 设置为 IE=edge?

或者是 documentMode 和 userAgent 不可靠来测试我们处于什么模式?

基本上,如果我们检测到用户处于该模式,我们想告诉用户“嘿,您不再需要将我们的网站放在您的兼容性视图列表中”。

【问题讨论】:

  • 谢谢尼科。是的,我并没有试图测试旧浏览器中的行为(我们按照你的建议在 vm 中这样做)。我试图在运行时确定他们是否为浏览器使用了非最佳文档模式,以便我们建议他们不要这样做。并且我试图判断开发工具是否误导了我如何检测这种情况。

标签: javascript cross-browser internet-explorer-10 ie8-compatibility-mode


【解决方案1】:

测试用户代理字符串足以确定页面是否处于兼容性视图模式。如果 UA 字符串是MSIE 10.0, Trident/6.0,您可以相信该页面处于 IE 10 标准模式。因此,在第一种情况下,我不相信开发人员工具报告的“浏览器模式:IE10 兼容视图”,正如您对建议标准模式的页面外观的观察所得出的那样。

对于您的情况,如果这是请求中的 UA 字符串,则意味着兼容性视图设置列表未得到遵守。浏览器模式和 UA 字符串是在发出请求之前生成的,因此它们不受响应中的X-UA-Compatible 标签或doctype 的影响。无论出于何种原因,IE10 似乎不尊重您的域的“兼容性视图设置”列表中的条目。这是该过程的说明from MSDN


(来源:microsoft.com

据我所知,您可以依靠用户代理字符串来确定何时通知访问者他们可以从兼容性视图设置列表中删除您的网站(或取消选择兼容性视图按钮)。具体来说,如果字符串为MSIE 7.0, Trident/6.0,则浏览器模式为Internet Explorer 7,Trident/6.0表示的浏览器为IE10。

有一个来自 MSDN 的really good blog post(上图来自)关于 IE9,它详细介绍了浏览器模式与文档模式,并指定了浏览器和 UA 字符串在这些不同情况下的行为。不幸的是,我还没有找到类似详细的关于 IE10 的帖子,但我猜测/希望行为是相似的。

最后一点:当您说网络应用程序有很多旧的怪癖页面时,我担心文档模式(怪癖)和浏览器模式(兼容性视图)之间的混淆。我猜这不是您的问题的一部分,但因为这种区别过去曾让我感到困惑,所以我只想在这里提一下。

【讨论】:

    【解决方案2】:

    userAgent 中的值是正确的测试; Trident/6.0 意味着不兼容模式,无论开发工具怎么说。

    【讨论】:

    • 至少在IE 9中,根据this,在兼容性视图中,“IE9报告一个UA字符串、版本向量和文档模式,好像是IE7;但是,UA 字符串还包含 Trident/5.0 标记,表明浏览器确实是 IE9。如果 IE9 用户单击“兼容性视图”按钮,请使用此模式测试他们如何体验您的网站。”
    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2013-03-02
    • 2013-03-27
    相关资源
    最近更新 更多