我可以使用HttpBrowserCapabilities对象在服务器端检测IE文档模式吗

Can I detect IE Document Mode on the server side using the HttpBrowserCapabilities object

本文关键字:IE 检测 文档 模式 服务器端 可以使 HttpBrowserCapabilities 对象 我可以      更新时间:2023-09-26

我可以使用HttpBrowserCapabilities对象找到浏览器版本和特定功能,但有没有办法找到浏览器用来渲染的文档模式?

等效于JavaScript属性document.documentMode

可以通过开发工具更改模式

更新

我希望在我的剃刀布局页面中使用类似的东西,为IE7及以下版本提供一个单独的样式表。。。

@if (ViewContext.IsBrowserOlderThanIE8()) {
<link href="Ie7.css" rel="stylesheet" type="text/css" />
}

在函数IsBrowserOlderThanIE8中,我可以检测浏览器版本,但这还不足以知道客户端使用的文档模式。文档模式对实际使用的渲染引擎有更多的影响。

您应该能够使用Request.UserAgent来获取其中包含功能标志的字符串。

检查这2个链接。

了解用户代理字符串

用户代理属性

编辑我想我会补充更多细节。基本上,用户代理字符串的三叉戟令牌是浏览器的REAL版本,MSIE令牌是它正在使用的浏览器模式。您可以通过使用第一个链接并运行fiddler来查看HTTP标头的样子,从而轻松地检查这一点。

更多编辑我打开fiddler,用IE9.0浏览到www.yahoo.com,然后看到User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)然后我点击兼容模式按钮,看到:

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7)

看看三叉戟两次都是5.0,但MSIE是9.0,然后是7.0?

根据您要访问的URL,有一些方法可以强制提供这些信息。例如,在我现在工作的网络应用程序上,由于各种原因,我们强制使用IE7兼容模式。

否。您无法通过服务器端代码确定文档模式。你可以检查compat。用户代理中具有trident值的模式,默认为文档模式。关键词。。默认值。。它仍然可以通过F12进行更改。如果用户再次更改文档模式,则为除兼容之外的其他模式。模式将其更改为,则您将无法看到更改。

您可以在客户端确定它,然后让客户端请求正确的css文件。。。

<head>
<script type="text/javascript>"
    ...
    var choice;
    if (condition) {
        choice = 'ie7';
    } else {
        choice = 'default';
    }
    document.writeln('<link type="text/css" rel="stylesheet" href="' + choice + '.css" />');
</script>
...
</head>

当然,您可以将这个小的"选择器"脚本制作成一个包含的文件,而不是在您制作的每个页面中直接编码。