【问题标题】:Can I detect IE Document Mode on the server side using the HttpBrowserCapabilities object我可以使用 HttpBrowserCapabilities 对象在服务器端检测 IE 文档模式吗
【发布时间】:2012-02-24 12:04:21
【问题描述】:

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

相当于 JavaScript 属性 document.documentMode

模式可以通过developer tools更改

更新

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

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

IsBrowserOlderThanIE8函数内我可以检测到浏览器版本,但这不足以知道客户端使用的是什么文档模式。文档模式更注重实际使用的渲染引擎。

【问题讨论】:

  • 定义“简单”。 AFAIK 它的功能检测并在浏览器中设置 cookie;读取服务器上的 cookie。
  • 在这种情况下,“简单”没有比较意义。我只是用它作为修辞格。它不应该在那里。对于那个很抱歉。只要有办法,我并不在乎它有多难或多容易!感谢您的建议。
  • 您不能只将您的 document.documentMode 信息传递到您的服务器端吗?
  • 第一个请求你会怎么做?

标签: javascript rendering httpbrowsercapabilities


【解决方案1】:

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

检查这两个链接。

Understanding User-Agent strings

User-Agent Properties

编辑 想我会添加更多细节。基本上,用户代理字符串的 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 兼容模式。

【讨论】:

  • 在服务器端,如果我查看HttpRequestUserAgent 属性,无论在浏览器中选择何种文档模式,我总是得到以下值Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENGB)。你没看到吗?
  • 是的,当我使用可计算性模式时,我确实得到了那个用户代理字符串。那可能很有用。但我真正需要的是文档模式。通过开发者工具菜单设置的模式...msdn.microsoft.com/en-us/library/…
  • 文档模式和兼容模式是一回事。如果 Trident =5.0 表示浏览器是 9.0,MSIE 是 7.0,表示它运行在文档模式,即兼容模式 IE7。除非我完全误解了这个问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这是一个很好的观点。当客户端也可以正常工作时,为什么我还要费心尝试做这个服务器端。我想我当时最终以另一种方式解决了这个问题。
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2014-08-24
    • 2020-03-16
    • 2020-08-27
    • 2019-04-30
    • 2012-12-18
    相关资源
    最近更新 更多