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

Javascript 我可以使用HttpBrowserCapabilities对象在服务器端检测IE文档模式吗,javascript,rendering,httpbrowsercapabilities,Javascript,Rendering,Httpbrowsercapabilities,我可以使用HttpBrowserCapabilities对象找到浏览器版本和特定功能,但是有没有办法找到浏览器用于渲染的文档模式 JavaScript属性的等价物document.documentMode 可通过以下方式更改模式: 更新 我希望在我的razor布局页面中包含一个独立的IE7及以下样式表 @if (ViewContext.IsBrowserOlderThanIE8()) { <link href="Ie7.css" rel="stylesheet" type="text/cs

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

JavaScript属性的等价物
document.documentMode

可通过以下方式更改模式:

更新

我希望在我的razor布局页面中包含一个独立的IE7及以下样式表

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

在function
IsBrowserOlderThanIE8
中,我可以检测到浏览器版本,但这还不足以知道客户端使用的是什么文档模式。文档模式对实际使用的渲染引擎有更多的强调。

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

检查这两个链接

编辑 我想我会添加更多细节。基本上,用户代理字符串的Trident标记是浏览器的真实版本,MSIE标记是它使用的浏览器模式。通过使用第一个链接并运行fiddler查看HTTP头的外观,您可以轻松地检查这一点

更多编辑 我打开fiddler,用IE9.0浏览www.yahoo.com,看到
用户代理:Mozilla/5.0(兼容;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,有几种方法可以强制提供此信息。例如,在我现在正在使用的web应用程序上,由于各种原因,我们强制使用IE7兼容模式。

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

检查这两个链接

编辑 我想我会添加更多细节。基本上,用户代理字符串的Trident标记是浏览器的真实版本,MSIE标记是它使用的浏览器模式。通过使用第一个链接并运行fiddler查看HTTP头的外观,您可以轻松地检查这一点

更多编辑 我打开fiddler,用IE9.0浏览www.yahoo.com,看到
用户代理:Mozilla/5.0(兼容;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,有几种方法可以强制提供此信息。例如,在我现在正在使用的web应用程序上,由于各种原因,我们强制使用IE7兼容模式。

否。您无法通过服务器端代码确定文档模式。 你可以检查一下电脑。在用户代理中使用trident值的模式,默认为文档模式。关键字..默认值..仍可以通过F12进行更改。
如果用户再次将文档模式更改为compat之外的其他模式。模式将其更改为,则您将无法看到更改。

否。您无法通过服务器端代码确定文档模式。 你可以检查一下电脑。在用户代理中使用trident值的模式,默认为文档模式。关键字..默认值..仍可以通过F12进行更改。
如果用户再次将文档模式更改为compat之外的其他模式。模式将其更改为,则您将无法看到更改。

您可以在客户端确定它,然后让客户端请求正确的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>


您可以在客户端确定它,然后让客户端请求正确的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>


定义“简单”。确认其特征检测并在浏览器中设置cookie;读取服务器上的cookie。在这种情况下,“Simply”没有可比较的含义。我只是用它来比喻。它不应该在那里。很抱歉。只要有办法,我真的不在乎它有多难或多容易!谢谢您的建议。您不能将document.documentMode信息传递到服务器端吗?对于第一个请求,您将如何执行此操作?定义“简单”。确认其特征检测并在浏览器中设置cookie;读取服务器上的cookie。在这种情况下,“Simply”没有可比较的含义。我只是用它来比喻。它不应该在那里。很抱歉。只要有办法,我真的不在乎它有多难或多容易!谢谢你的建议。难道你不能直接将document.documentMode信息传递到服务器端吗?对于第一个请求,你会怎么做?在服务器端,如果我查看
HttpRequest
UserAgent
属性,我总是会得到以下值
Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0;BOIE9;英语)
无论浏览器中选择的是哪种文档模式。您没有看到吗?是的,当我使用可计算模式时,我会得到用户代理字符串。这可能很有用。但我真正需要的是文档模式。通过开发工具菜单设置的模式…文档模式与兼容模式相同。如果ent=5.0意味着浏览器是9.0,MSIE是7.0,这意味着它在文档模式ie兼容模式IE7下运行。除非我完全误解了这个问题。在服务器端,如果我查看
HttpRequest
UserAgent
属性,我总是会得到以下值
Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0;BOIE9;ENGB)
无论浏览器中选择的文档模式如何。您没有看到吗?是的,当我使用可计算性模式时,我会得到用户代理字符串。这可能很有用。但我真正需要的是文档模式。通过