2

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

JavaScript 属性的等价物document.documentMode

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

更新

我希望在我的剃须刀布局页面中使用类似这样的内容为 IE7 及以下版本添加一个单独的样式表......

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

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

4

3 回答 3

3

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

检查这两个链接。

了解用户代理字符串

用户代理属性

编辑 想我会添加更多细节。基本上,用户代理字符串的 Trident 令牌是浏览器的真实版本,而 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)

看看 trident = 5.0 两次但 MSIE 是 9.0 然后是 7.0?

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

于 2012-02-24T15:58:30.547 回答
1

不,您无法通过服务器端代码确定文档模式。您可以检查兼容性。mode 与用户代理中的 trident 值,默认为文档模式。关键字..默认值..仍然可以通过 F12 更改。如果用户随后再次将文档模式更改为兼容模式之外的其他模式。模式将其更改为,然后您将无法看到更改。

于 2014-06-27T15:51:16.380 回答
0

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

当然,您可以将那个小的“选择器”脚本制作为包含在内的文件,而不是在您制作的每个页面中实际对其进行内联编码。

于 2014-11-18T19:30:57.150 回答