1

.Net MVC 3 中的以下代码在应返回“Opera 12”或“Opera 11”时返回“Opera 9”已经在多台机器上确认了这一点,Win 7 64 位和 XP 32 位。

public ActionResult TestBrowser()
{
    return Content(Request.Browser.Browser + " " + Request.Browser.MajorVersion);
}

出于某种原因,Opera 的浏览器标签中有一个 9.8,实际版本号在末尾。
Opera 帮助...关于

这是 Opera 的错误格式化浏览器标签,还是HttpBrowserCapabilitiesBase类的错误解析错误?

4

3 回答 3

1

我发现这解释了 Opera 的用户代理字符串以及为什么 Opera/9.80 现在硬编码在用户代理字符串中。

http://my.opera.com/community/openweb/idopera/

就像我在评论中所说的那样,最好查看功能检测,因为您可能很快就会遇到与 IE 10 相同的问题。

编辑:一种解决方案可能是自己解析用户代理字符串。

编辑 2:如果您想进行浏览器检测,可以使用 Modernizr Javascript 库(http://modernizr.com/),它做得很好。

于 2013-02-21T16:50:41.527 回答
1

@Sashenka:正如您所指出的,需要 Opera 字符串的硬部分。如果其他浏览器出于类似原因不需要类似的想法,我不会感到惊讶。然而,特征检测只是另一种蠕虫,等待着你在蜂后。例如,IE 的每个版本都改变了它们处理事物的方式;即,您根本不能信任 M$。解析用户代理字符串并不是那么困难,几乎可以保证成功。综上所述,我想知道按照标准编写代码,根据需要包含 IE 绷带,让每个浏览器按照设计者的意图呈现页面是否更容易;好,坏或无所谓!:-)

于 2013-02-21T17:12:58.383 回答
1

根据我的经验,正确的版本控制(假设它不是欺骗的用户代理字符串)始终是最后一个斜杠之后显示的版本。所以删除前面的所有内容,包括最后一个斜杠,其余的将是您当前的版本。

于 2013-02-21T16:59:53.173 回答