在域控制的环境中,我发现即使我们提供 X-UA 标签、!DOCTYPE 定义和“IE=Edge”响应,兼容模式也会在某些客户端(winXP/Win7、IE8/IE9)上触发标题。这些客户端勾选了“在兼容性视图中显示 Intranet 站点”复选框。这正是我想要覆盖的。
以下是我用来尝试了解 IE 如何决定实际触发兼容模式的文档。
http://msdn.microsoft.com/en-us/library/ff406036%28v=VS.85%29.aspx
http://blogs.msdn.com/b/ie/archive/2009/02/16/just-the-facts-recap-of-compatibility-view.aspx
网站所有者始终可以控制其内容。网站所有者可以选择使用 X-UA-Compatible 标签来绝对声明他们希望他们的网站如何显示并将标准模式页面映射到 IE7 标准。使用 X-UA-Compatible 标签会覆盖客户端上的兼容性视图。
谷歌“定义文档兼容性”,遗憾的是垃圾邮件引擎不允许我发布超过 2 个网址。
这是一个ASP .NET
Web 应用程序,在母版页上包含以下定义:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
</head>
和web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
我使用 Fiddler 来检查标头是否确实被正确注入。
我的理解是,通过这些设置,我应该能够覆盖“在兼容性视图中显示 Intranet 站点”浏览器设置。但是根据客户端的不同,我发现其中一些仍然会触发兼容模式。它似乎也归结为机器级别而不是策略组设置,因为即使我在不同客户端上使用相同的凭据集,我也会获得不同的结果。
禁用兼容性视图设置复选框可以解决问题。但实际目的是确保应用程序以完全相同的方式呈现,而不管客户端设置如何。
有什么想法和我可能遗漏的东西吗?是否有可能强制 IE 始终呈现页面而不触发 Compat 模式?
太感谢了,
豪梅
PS:该网站目前正在开发中,当然不在微软的兼容性列表中,但我也检查了以防万一。
Google for "Understanding the Compatibility View List",遗憾的是垃圾邮件引擎不允许我发布超过 2 个网址。