我正在寻找一种用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
Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident / 5.0)
现在我想知道为什么这个浏览器会识别为Mozilla
答案 0 :(得分:9)
这是网站开发人员和网络浏览器之间永无休止的战争的结果。
每次浏览器推出新功能时,开发人员都希望使用该功能。但他们也需要处理不支持它的浏览器。
最明显的方法是使用UA字符串。查找您知道支持该功能的浏览器,并相应地运行您的代码。容易。
除此之外并不容易,因为不可避免地会发生几个月后其他浏览器支持相同功能。
所以现在其他浏览器出现问题:使用他们支持的功能编写网站,但这些网站只激活一个特定浏览器的功能。
浏览器供应商的解决方案:修改他们的UA字符串,以便欺骗网站激活该功能。
这种事情自1990年代以来一直在发生,当时IE和Netscape打了“浏览器大战”(“Mozilla”是Netscape唯一的UA字符串名称,所以其他人都将其复制到UA字符串中以实现兼容性),以及一直持续到今天(当IE11发布时,它的UA字符串与IE10的UA字符串完全不同,这是专门完成的,以便打破浏览器嗅探代码)。
最终结果是所有主流浏览器的UA字符串完全混乱。它们充满了奇怪的东西,比如竞争对手的名字,不正确的版本号,多个版本号以及其他模糊的引用,所有这些都旨在愚弄任何愚蠢的脚本来尝试阅读它。是的,可能只是可以解析它并获得可靠的浏览器检测,但是一旦任何浏览器发布新版本,它可能会再次崩溃。
最重要的是,为了增加混乱,大多数浏览器还提供配置设置,以便用户能够更改UA字符串;众所周知,一些第三方产品(防病毒,防火墙,代理等)也可以修改或替换UA字符串,所有这些都使得解析它时得到可靠响应的可能性更小。
那么所有这些内容的主页消息是什么?
作为开发人员,您最好只是完全忽略UA字符串。对于任何实际目的,它几乎毫无价值。如果您需要使用可能并非在所有浏览器中都可用的功能,通常最好不要进行功能检测而不是嗅探UA字符串(您可能需要考虑Modernizr library)。
假装UA字符串不存在,您作为开发人员的生活将变得更加轻松。