在asp.net-mvc中,有没有办法区分处于兼容模式的IE7用户和IE8用户?

6
对于IE7用户,我想放置一个特定的"请立即升级"横幅。我认为我做到了,但是我发现我的横幅会弹出在那些默认开启兼容模式的IE8用户面前。
有没有办法区分这两种情况,以便我可以更改我的消息,从:
“请升级IE7” 改为 “您正在使用IE8,但正在使用兼容性模式,请关闭它”
以下是我现在在我的视图中使用的代码:
You are using <b><% = Request.Browser.Browser + ", Version: " + Request.Browser.Version%>

但是如果我在IE8中使用兼容性视图进行测试,可以通过使用上述代码或客户端上的此代码:

<!--[if lte IE 7]>

它返回true并显示为IE7。我该如何区分这两者?


我与IE团队核实过,他们已经确认MrGomez是正确的——UA字符串的Trident标记是实现此操作的方法。请参见我在MrGomez答案下的附加评论。考虑重新标记,这与MVC无关。 - RickAndMSFT
4个回答

7

根据 user-agents.org 和其他答案链接的一些讨论,您可以通过检查收到的用户代理字符串来区分这三种情况。

  • 对于MSIE 7.0:检查是否存在MSIE 7.0和缺少Trident

    例如:Mozilla/4.0(兼容;MSIE 7.0; Windows NT 5.1; GTB5; User-agent: Mozilla/4.0(兼容;MSIE 6.0; Windows NT 5.1; SV1; http://bsalsa.com); .NET CLR 2.0.50727)

  • 对于以兼容模式运行的MSIE 8.0:检查是否存在MSIE 7.0存在Trident/4.0

    例如:Mozilla/4.0(兼容;MSIE 7.0; Windows NT 6.1;Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)

  • 对于以标准模式运行的MSIE 8.0:检查是否存在MSIE 8.0

    例如:Mozilla/4.0(兼容;MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)

为了进行这些检查,请参考以下教程,将所有关于iPhone和移动设备的无意义内容替换为您要检查的浏览器。祝你的应用程序好运。

1
如果你在寻找“Trident/4.0”,你将会错误地将IE7兼容模式下的用户标记为IE9,而实际上IE9的内核是“Trident/5.0”。 - saluce
@saluce 这个问题特别询问了IE8和IE7的分区,但是这也是一个有用的改进,可以考虑到其他情况。谢谢! - MrGomez
1
我与IE团队核实过,他们已确认UA字符串的Trident标记是实现此功能的方法。当然,网站也可以通过X-UA-Compatible指定文档模式,这样兼容性视图按钮甚至不会出现,如果用户已经按下该域的兼容性视图按钮,则网站指定的文档模式将覆盖CV按钮。这样,您就知道IE8用户将始终获得IE8模式。 - RickAndMSFT
@Rick.Anderson-at-Microsoft.com 这是非常有用的第一手信息。谢谢! - MrGomez

1

微软的理解用户代理字符串文档详细解释了不同IE版本(包括兼容模式)发送的用户代理字符串。如果您确定用户代理显示MSIE 7.0,请查找用户代理字符串中的Trident,这表示浏览器实际上是IE8+的兼容模式。

该文档有一个部分解释了Trident标记及其工作原理。


1
将以下代码加入您的标头中:<meta http-equiv="X-UA-Compatible" content="IE=8">,可以让IE8不以兼容模式加载。

我觉得你的答案漏了些东西 :) - joshuahealy
但我认为它可能会在IE 9中以IE 8文档模式加载,因此它可能只是将问题推迟到更高的版本 :-) - TGH
content="IE=edge"会让IE8表现得像IE8,而IE9表现得像IE9。 - SpliFF
@TGH - 谢谢,这很有帮助,但仍然没有给我检查的方法...你是说这行代码会覆盖用户浏览器的设置吗? - leora
1
是的,我已经与IE团队确认,该网站也可以使用X-UA-Compatible指定文档模式,因此兼容性视图按钮甚至不会出现,如果用户已经按下了该域的兼容性视图按钮,则网站指定的文档模式将覆盖CV按钮。这样,您就知道IE8用户将始终获得IE8模式。 - RickAndMSFT

0

我相信TGH是正确的。

另一个选择是使用jQuery的内置函数来完全测试:浏览器类型、浏览器版本和浏览器模式:

$.browser.msie
$.browser.version
document.documentMode

如果用户在兼容模式下使用IE8,.version会显示什么(7还是8)?此外,似乎这些已经被弃用了? - leora
好的,看起来这个问题在这里已经得到了回答:https://dev59.com/TEjSa4cB1Zd3GeqPJ_VW#1298786 - john_science
这意味着这个答案是不正确的,因为它无法区分。 - leora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接