我正在开发一个可以作为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网站”设置。但是,他的评论是我发现的唯一提到这一点的地方。任何人都可以确认或否认这种说法吗?
还有什么我可以尝试的吗?我不应该告诉所有部署我们产品的客户取消选中“在兼容性视图中显示内部网站点”浏览器设置,以便所有用户使用。
答案 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
,并帮助解决了问题。