2013-02-21 33 views
1

当.NET MVC 3中的以下代码返回“Opera 12”或“Opera 11”时,它会在多台机器上确认此消息,Win 7 64位和XP 32位。.NET Request.Browser错误地标识Opera版本

​​3210

由于某些原因,Opera的浏览器标签有9.8个,实际版本号为最后。
Opera Help...About

这是Opera的过错格式浏览器标签错误,或HttpBrowserCapabilitiesBase类的故障解析它错了吗?

+2

用户代理很容易被欺骗和不准确。也许你应该考虑功能检测。但我可以确认它也会为我返回Opera 9。 – Sashenka 2013-02-21 16:34:45

+0

什么是'Request.Browser.MinorVersion'返回? – 2013-02-21 16:44:30

+0

@DanielHilgarth MinorVersion正在返回80 – 2013-02-21 16:48:38

回答

1

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

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

就像我在我的评论说,这可能会更好看功能检测,因为你可能有同样的问题与IE 10很快。

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

编辑2:如果你想浏览器检测,有Modernizr Javascript库(http://modernizr.com/),它做了一个很好的工作。

1

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

1

@Sashenka:正如你所指出的那样,Opera字符串的硬盘部分是需要的。如果出于类似的原因,其他浏览器不需要类似的想法,我也不会感到惊讶。然而,功能检测只是蠕虫等待你在后面的字节的另一罐。例如,每一个IE版本都会改​​变他们处理事物的方式;即,你根本不能相信M $。解析用户代理字符串并不是那么困难,几乎可以保证成功。所有这些,我想知道为标准编写代码是否容易,要求包括IE绷带,并让每个浏览器按照设计者的意图展示页面;好,坏或无动于衷! :-)

+0

Opera说:“Opera/9.80被硬编码在用户代理字符串的开头,因为检测到”Opera/10“及其以上版本为Opera 1的浏览器嗅探脚本崩溃”所以现在我们有了修复破碎的依赖关系的窍门,这造成了更多的中断依赖关系。现在是一个循环问题:( – 2013-02-21 17:16:46

+0

我仍然认为功能检测可能比浏览器检测更具前瞻性,如果MS使用IE或修补程序发布时会发生某些问题,您仍然会检测到相同版本的IE,但没有该功能您已经习惯了。还有Modernizr JavaScript库(http://modernizr.com/),它可以帮助您轻松检测访问您的网站的浏览器支持的内容。 – Sashenka 2013-02-21 18:17:50