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

Vinicius Monteiro

我一直在寻找一种使用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

斯普德利

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

每次浏览器推出一项新功能时,开发人员都想使用该功能。但是他们还需要处理不支持它的浏览器。

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

除非不是那么容易,否则不可避免地是几个月后其他浏览器才支持相同的功能。

因此,其他浏览器现在遇到了一个问题:网站被编写为使用其支持的功能,但是这些网站仅为一个特定的浏览器激活了该功能。

浏览器供应商的解决方案:修改其UA字符串,以使站点愚弄到激活功能。

自1990年代以来,IE和Netscape进行了“浏览器大战”(“ Mozilla”是Netscape唯一的UA字符串名称,因此其他所有人都将其复制到UA字符串中以实现兼容性),这种情况一直在发生。直到今天(发布IE11时,其UA字符串与IE10的UA字符串完全不同,这是专门为打破浏览器嗅探代码而进行的操作)。

最终结果是所有主要浏览器的UA字符串都是一团糟。它们充满了奇怪的东西,例如竞争对手的名称,不正确的版本号,多个版本号以及其他晦涩的引用,所有这些都旨在愚弄任何愚蠢的脚本以尝试读取它。是的,解析它并获得可靠的浏览器检测可能是可能的,但是任何一种浏览器发布新版本时,它都可能再次中断。

除此之外,大多数浏览器还提供配置设置,以使用户能够更改UA字符串,这使情况更加混乱。众所周知,某些第三方产品(防病毒,防火墙,代理等)也可以修改或替换UA字符串,所有这些使解析字符串得到可靠响应的可能性更低。

那么,所有这些带回家的信息是什么?

作为开发人员,最好的选择就是完全忽略UA字符串。出于任何实际目的,这对您几乎一文不值。如果需要使用并非所有浏览器都可用的功能,通常最好进行功能检测,而不是嗅探UA字符串(为此您可能要考虑Modernizr库)。

只是假装UA字符串不存在,那么您作为开发人员的生活就会容易得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery Detect IE9及更低版本的浏览器并抛出升级模式

来自分类Dev

如何使IE9中的Array.toString()与现代浏览器兼容

来自分类Dev

IE8和IE9的Fancybox样式问题

来自分类Dev

商业,px,浏览器的媒体查询> = IE9

来自分类Dev

IE9和IE10的字体问题

来自分类Dev

Angularjs,文件上传和IE9

来自分类Dev

Ionic Framework可以在Chrome,Mozilla,IE9 +等桌面网络浏览器中运行吗?

来自分类Dev

ie9与现代html和CSS语言的兼容性(跨浏览器CSS)

来自分类Dev

jvectormap无法在Internet浏览器上显示地图探索兼容模式或<IE9

来自分类Dev

Windows 10为浏览器的用户代理设置了什么操作系统名称?

来自分类Dev

为什么对于IE9,IE10和IE11上的固定元素,translateX无法正常工作?

来自分类Dev

IE,Chrome浏览器加载缓慢;在FF和Opera中不错

来自分类Dev

为什么页脚没有出现在IE10和IE9上?

来自分类Dev

为什么没有针对IE9等旧版浏览器的flexbox polyfill?

来自分类Dev

为什么Android浏览器在用户代理字符串中显示为“ Safari”和“ Chrome”?

来自分类Dev

为什么我们需要为Chrome和IE浏览器而不是Firefox浏览器设置系统属性

来自分类Dev

精细上传器不允许再选择IE8和IE9中的多个文件

来自分类Dev

Opera为什么不发布Opera浏览器13和14版本?

来自分类Dev

为什么Google Chrome浏览器不保存代理用户名/密码?

来自分类Dev

IE8和IE9之间的布局差异

来自分类Dev

为什么动画d3 svg线不与IE9中的轴位移同步,而是与IE11和Chrome中的轴位移同步?

来自分类Dev

从快捷方式以IE9浏览器模式运行IE11

来自分类Dev

从快捷方式以IE9浏览器模式运行IE11

来自分类Dev

为什么caniuse.com仅列出IE8和IE11,而不列出IE9或IE10?

来自分类Dev

为什么页脚没有出现在IE10和IE9上?

来自分类Dev

支持的最低浏览器(Chrome,IE,Mozilla)版本?

来自分类Dev

为什么我们需要下载浏览器(IE,Chrome)驱动程序

来自分类Dev

为什么 IE9 没有覆盖 css 类?

来自分类Dev

为什么我的 IE 浏览器会使用 Selenium 和 Cucumber 启动两次?

Related 相关文章

  1. 1

    jQuery Detect IE9及更低版本的浏览器并抛出升级模式

  2. 2

    如何使IE9中的Array.toString()与现代浏览器兼容

  3. 3

    IE8和IE9的Fancybox样式问题

  4. 4

    商业,px,浏览器的媒体查询> = IE9

  5. 5

    IE9和IE10的字体问题

  6. 6

    Angularjs,文件上传和IE9

  7. 7

    Ionic Framework可以在Chrome,Mozilla,IE9 +等桌面网络浏览器中运行吗?

  8. 8

    ie9与现代html和CSS语言的兼容性(跨浏览器CSS)

  9. 9

    jvectormap无法在Internet浏览器上显示地图探索兼容模式或<IE9

  10. 10

    Windows 10为浏览器的用户代理设置了什么操作系统名称?

  11. 11

    为什么对于IE9,IE10和IE11上的固定元素,translateX无法正常工作?

  12. 12

    IE,Chrome浏览器加载缓慢;在FF和Opera中不错

  13. 13

    为什么页脚没有出现在IE10和IE9上?

  14. 14

    为什么没有针对IE9等旧版浏览器的flexbox polyfill?

  15. 15

    为什么Android浏览器在用户代理字符串中显示为“ Safari”和“ Chrome”?

  16. 16

    为什么我们需要为Chrome和IE浏览器而不是Firefox浏览器设置系统属性

  17. 17

    精细上传器不允许再选择IE8和IE9中的多个文件

  18. 18

    Opera为什么不发布Opera浏览器13和14版本?

  19. 19

    为什么Google Chrome浏览器不保存代理用户名/密码?

  20. 20

    IE8和IE9之间的布局差异

  21. 21

    为什么动画d3 svg线不与IE9中的轴位移同步,而是与IE11和Chrome中的轴位移同步?

  22. 22

    从快捷方式以IE9浏览器模式运行IE11

  23. 23

    从快捷方式以IE9浏览器模式运行IE11

  24. 24

    为什么caniuse.com仅列出IE8和IE11,而不列出IE9或IE10?

  25. 25

    为什么页脚没有出现在IE10和IE9上?

  26. 26

    支持的最低浏览器(Chrome,IE,Mozilla)版本?

  27. 27

    为什么我们需要下载浏览器(IE,Chrome)驱动程序

  28. 28

    为什么 IE9 没有覆盖 css 类?

  29. 29

    为什么我的 IE 浏览器会使用 Selenium 和 Cucumber 启动两次?

热门标签

归档