【问题标题】:Does the X-UA Compatible http header actually work for IE9?X-UA 兼容的 http 标头实际上是否适用于 IE9?
【发布时间】:2012-04-05 00:13:14
【问题描述】:

我正在开发一个可以作为 Intranet 站点托管的网络产品。我正在尝试找到一种编程方式来防止 IE9 滑入 IE9 兼容性视图浏览器模式,即使“在兼容性视图中显示 Intranet 站点”可能已打开。

我正在使用这个 html 页面进行测试:

<!DOCTYPE HTML>

<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=9" />
        <title>Company</title>
    </head>
    <body>
    </body>
</html>

我已将其放入 IIS 配置中:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <clear />
            <add name="X-UA-Compatible" value="IE=edge" />
        </customHeaders>
    </httpProtocol>

在这里推荐:https://stackoverflow.com/a/5887546,并检查了 IE9 中的响应标头并查看:

X-UA-Compatible     IE=Edge

但页面仍将浏览器置于 Compatibility View 浏览器模式。

控制台显示:

HTML1202: http://intranet-site/test.html is running in Compatibility View because 'Display intranet sites in Compatibility View' is checked. 
test.html

这里有一个类似的问题:https://stackoverflow.com/a/3726605/1279516,其中 Jacob 对所选答案的评论表明,在 IE9 中,您无法覆盖“在兼容性视图中显示 Intranet 站点”设置。然而,他的评论是我发现的唯一提到这一点的地方。任何人都可以确认或否认这一说法吗?

还有什么我可以尝试的吗?我不应该告诉所有部署我们产品的客户为所有用户取消选中“在兼容性视图中显示 Intranet 站点”浏览器设置。

【问题讨论】:

  • 您在您网站的 IE 开发工具中看到了哪种文档模式?
  • 文档模式其实是IE9标准。这确保了渲染是在标准模式下完成的,但并不是所有的 javascript 功能都可用,对吗?
  • 不,实际上你应该只检查文档模式。浏览器模型是初始参数,它决定了如何计算文档模式(默认情况下)。所以,如果你有正确的文档模式,那么一切都应该按预期工作。
  • 我认为我缺少的功能是 .querySelector() - 仅在文档​​模式为 IE8 标准或更高版本时可用。添加到上述 html 的简短测试确认 .querySelector 即使在浏览器模式为 IE9 兼容性视图(IE8 中的 IE8 兼容性视图)时也可用。

标签: html browser internet-explorer-9 doctype


【解决方案1】:

除非有人另有说明,否则 oryol 的评论表明所有功能都基于文档模式提供,因此一旦获得所需的文档模式,就无需尝试进一步控制浏览器模式。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题 - 页面在 IE8/9 中无法正确呈现,因为 在兼容性视图中显示 Intranet 站点 已打开。要求所有用户禁用此功能或要求组策略并为我不知道有多少其他 Intranet 页面需要此功能添加例外不是一个选项。 感谢X-UA-Compatible: IE=edge,文档模式还可以。但我仍然有布局问题。

    原因: 兼容模式导致 IE 向服务器发送另一个用户代理。对于 IE8,9,这是 IE7 的。 我的一些 ASP.NET 库会基于此进行一些检查并呈现 IE7 特定的 HTML/CSS,从而导致布局问题。

    解决方案: 如果服务器上的 UserAgent 字符串显示为“IE7”,则将其修改为“IE9”。当然这是一个肮脏的解决方案,因为理论上可能有一个真正的 IE7 客户端。 在我的事业(内联网)中,我知道我的用户只有 IE >= 8。 事实证明,更改 UserAgent 比预期的要难。我成功申请了this idea - 从 HttpWorkerRequest 派生一个子类并拦截 UserAgent 的请求。这间接重载了request.UserAgent 并帮助解决了问题。

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 2015-06-15
      • 2013-04-25
      • 2014-09-06
      • 1970-01-01
      • 2012-02-03
      • 2012-07-10
      • 2013-07-28
      • 2013-03-01
      相关资源
      最近更新 更多