为什么IE9 +,Chrome和Opera15 +浏览器在用户代理中将自己标识为Mozilla?

Vin*_*iro 2 opera internet-explorer user-agent mozilla google-chrome

我正在寻找一种用JavaScript识别IE的方法,突然间,我注意到浏览器被识别为Mozilla:

歌剧

Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53

Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,像Gecko)Chrome/31.0.1650.57 Safari/537.36

IE

Mozilla/5.0(兼容; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

现在我想知道为什么这个浏览器被识别为Mozilla

Spu*_*ley 9

这是网站开发人员和网络浏览器之间永无止境的战争的结果.

每当浏览器推出新功能时,开发人员都希望使用该功能.但他们也需要处理不支持它的浏览器.

最明显的方法是使用UA字符串.查找您知道支持该功能的浏览器,并相应地运行您的代码.简单.

除了它并不那么容易,因为不可避免地发生的事情是几个月后其他浏览器支持相同的功能.

所以现在其他浏览器都有问题:站点被编写为使用它们支持的功能,但这些站点仅激活一个特定浏览器的功能.

浏览器供应商的解决方案:修改其UA字符串,以便欺骗网站激活该功能.

这种事情已经持续了自20世纪90年代,当IE和Netscape打的"浏览器大战"("Mozilla的"是Netscape的独特的UA字符串名称,所以每个人都复制成它们的UA字符串的兼容性),并一直持续到今天(当IE11发布时,它的UA字符串与IE10的UA字符串完全不同,这是专门为了打破浏览器嗅探代码而完成的).

最终结果是所有主流浏览器的UA字符串完全混乱.它们充满了奇怪的东西,比如竞争对手的名字,不正确的版本号,多个版本号以及其他模糊的引用,都旨在愚弄任何愚蠢的脚本来尝试阅读它.是的,可能只是可以解析它并获得可靠的浏览器检测,但是一旦任何浏览器发布新版本,它可能会再次破坏.

最重要的是,为了增加混乱,大多数浏览器还提供配置设置,以便用户能够更改UA字符串; 已知一些第三方产品(防病毒,防火墙,代理等)也可以修改或替换UA字符串,所有这些都使得解析它的可靠性更低.

那么这一切的主要信息是什么呢?

作为开发人员,您最好的方法就是完全忽略UA字符串.对于任何实际目的,它几乎毫无价值.如果您需要使用可能并非在所有浏览器中都可用的功能,通常最好不要进行功能检测,而不是嗅探UA字符串(您可能需要考虑Modernizr库).

只是假装UA字符串不存在,作为开发人员的生活将变得更加轻松.