X-UA兼容的http标头是否真的适用于IE9?

时间:2012-03-20 14:00:59

标签: html browser internet-explorer-9 doctype

我正在开发一个可以作为Intranet站点托管的Web产品。我正在尝试找到一种程序化的方法来防止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

但该页面仍然将浏览器置于兼容性视图浏览器模式中。

控制台显示:

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网站”设置。但是,他的评论是我发现的唯一提到这一点的地方。任何人都可以确认或否认这种说法吗?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

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