在域控制的环境中,我发现在某些客户端(winXP/Win7,IE8/IE9)上触发兼容模式,即使我们提供X-UA标签,!DOCTYPE定义和"IE = Edge"响应头.这些客户端勾选了"在兼容性视图中显示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标记会覆盖客户端上的兼容性视图.
谷歌的"定义文档兼容性",遗憾的是SPAM引擎不允许我发布超过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>
Run Code Online (Sandbox Code Playgroud)
和 web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我已经使用Fiddler来检查标头是否确实被正确注入.
我的理解是,通过这些设置,我应该能够覆盖"在兼容性视图中显示Intranet站点"浏览器设置.但根据客户端的不同,我发现其中一些仍会触发兼容模式.它似乎也取决于机器级别而不是策略组设置,因为即使我在不同客户端上使用相同的凭据集,我也会获得不同的结果.
禁用兼容性视图设置复选框可以解决问题.但实际目的是确保无论客户端设置如何,应用程序都以完全相同的方式呈现.
任何想法和我可能会错过的东西?是否有可能强制IE始终渲染页面而不触发Compat模式?
太感谢了,
乌梅
PS:该网站目前正在开发中,当然不在微软的兼容性列表中,但我也检查过以防万一.
谷歌"了解兼容性视图列表",遗憾的是SPAM引擎不允许我发布超过2个网址.
asp.net internet-explorer ie8-compatibility-mode x-ua-compatible