JS识别各浏览器版本完整实例代码

作者:小菜 更新时间:2025-02-27 点击数:
简介:自昨天发了各浏览器内核介绍的随笔,就闲不住了,想直接写个JS来识别用户所用浏览器版本。

写着写着却发现很多坑爹的地方,比如IE10-的版本是依循常规只支持atta

【菜科解读】

自昨天发了各浏览器内核介绍的随笔,就闲不住了,想直接写个JS来识别用户所用浏览器版本。

写着写着却发现很多坑爹的地方,比如IE10-的版本是依循常规只支持attachEvent而不支持addEventListener,但到了IE11,却反过来只支持addEventListener而不支持attachEvent。

光是这一点就可以判断IE是个大坑,IE11的存在可能会导致之前你写过的代码出现错乱。

另如原本可用

var ieVersion = eval(" +/*@cc_on"+" @_jscript_version@*/-0")*1

的嗅探脚本来判断是否IE,如果值非0则表示为IE浏览器,但到了IE11,也直接返回0了(即IE11不再识别@cc_on这个IE独有的条件编译语句)。

还有就是上篇文章提到的Opera自从去年就抛弃了自家的Presto内核,转而跟进使用Chrome内核,导致的结果是,新版Opera不再支持window.opera,而且跟随Chrome浏览器支持window.chrome等系列Chrome特性,就连userAgent字样也去了“opera”并直接套用Chromium/Blink内核的userAgent信息(好事是在尾部还是保留了一句OPR/XX.0)

不过琢磨琢磨,问题总会得到解决的。

首先解决下比较容易解决的Firefox,其userAgent信息如下:

对比其它浏览器内核的ua信息它独有“Firefox/XX.0”字样,故我们可以这样判断:

rFirefox=/(firefox)\/([\w.]+)/;matchBS=rFirefox.exec(ua);if((matchBS!=null)&&(!(window.attachEvent))&&(!(window.chrome))&&(!(window.opera))){//codes...}

这里还判断了是否支持window.attachEvent 和 window.chrome、window.opera事件,是为了防止其它非Firefox浏览器的伪装ua信息,但我承认这点很难做到尽善尽美。

接着是Safari,虽然Safari的ua信息含有safari字样,但由于谷歌的浏览器是苹果浏览器内核WebKit的分支,导致Chrome的ua信息也含有safari字样:

这种情况只能“找不同”了,可以看到Safari的ua信息在“Safari/...”之前连着一个“Version/...”,而Chrome的ua信息是没有的,所以可以这样写:

rSafari=/version\/([\w.]+).*(safari)/;matchBS=rSafari.exec(ua);if((matchBS!=null)&&(!(window.attachEvent))&&(!(window.chrome))&&(!(window.opera))){//....}

接着说Chrome和Opera,这里比较头疼的一点。

是Chrome的好基友Opera也开始使用了Chromium或Blink引擎,导致二者ua信息以及对BOM的支持几乎一致(这不废话么,内核都一样了),但还是可以从ua找不同:

于是我们可以这样写(注意Opera也要兼顾旧版本,也就是使用Presto内核的情况):

rOpera=/(opera).+version\/([\w.]+)/;rNewOpera=/(opr)\/(.+)/;rChrome=/(chrome)\/([\w.]+)/;matchBS=rOpera.exec(ua);if((matchBS!=null)&&(!(window.attachEvent))){//旧Opera识别return{browser:matchBS[1]||"",version:matchBS[2]||"0"};matchBS=rChrome.exec(ua);if((matchBS!=null)&&(!!(window.chrome))&&(!(window.attachEvent))){//Chrome识别matchBS2=rNewOpera.exec(ua);if(matchBS2==null)//新Opera识别return{browser:matchBS[1]||"",version:matchBS[2]||"0"};elsereturn{browser:"Opera",version:matchBS2[2]||"0"};}

最后说下IE的识别吧,IE是个大坑(红框部分是建议用于判断的地方):

由上图可知,IE6/7从MSIE版本号直接判断即可,从IE8开始多了个Trident信息,则IE8-IE11只需判断Trident版本号。

那么我们就可以自行写两个判断,先判断是否IE——即ua信息是否包含了MSIE信息或者Trident信息(注意IE11已经移除了MSIE信息),接着再判断是否IE7-或者IE8+ :

rMsie=/(msie\s|trident\/7)([\w.]+)/;rTrident=/(trident)\/([\w.]+)/;matchBS=rMsie.exec(ua);if(matchBS!=null){matchBS2=rTrident.exec(ua);if(matchBS2!=null){switch(matchBS2[2]){case"4.0":return{browser:"IE",version:"8"};break;case"5.0":return{browser:"IE",version:"9"};break;case"6.0":return{browser:"IE",version:"10"};break;case"7.0":return{browser:"IE",version:"11"};break;default:return{browser:"IE",version:"undefined"};}}elsereturn{browser:"IE",version:matchBS[2]||"0"};}

下面贴下全部代码,可供参考:

不过还是得说,识别各种版本的浏览器是项非常麻烦的事情,以上代码能帮你顺利应付大部分的情况,但如果遇到某些特殊情景(比如浏览器伪装ua信息),就无法识别浏览器具体版本了。

识别,各,浏览器,版本,完整,实例,代码,自昨,

面对外星文明的到来 人类该面对呢? 各种可能性

如果外星生命真的降临地球,到那时,人类又该面对着什么,背后有着太多的可能性。

一直以来,,人类都以为只有自己才是宇宙中存在的唯一智慧生命,严格意义上来说,宇宙的深处是否存在着其他高级文明,人们是不得而知的,所以这个问题是没有办法进行定义的。

外星生命是否存在关于外星生命是否存在的问题,至今备受争议,每个人都有着不同的观点和看法,想要在浩瀚宇宙中,找到可以当作人类的同伴,本来是非常困难的一件事。

毕竟,人们也不知道遥远的外太空是否存在着其他生命如果有一天,真的有高级生命降临地球,人类又应该怎么样去面对。

宇宙怪才霍金先生的观点著名的物理学家宇宙怪才霍金先生,针对这个问题,在生前就给出过他的看法,宇宙怪才霍金先生多次在生前警告人类,不要试图去寻找外星生物,更不要奢望与他们之间建立起联系,即便是发现了外星生命的存在,也千万不要主动的进行接触。

在宇宙怪才霍金先生的观点中,认为外星生命是极其危险的,因为没有任何人敢保证,他们会如何看待地球人类的存在。

如果外星生命拥有着远超于人类技术的科技水平,人类的处境将会陷入被动,生命安全将会受到严重的威胁。

有着太多的可能性人类目前的现有技术,是无法成功的离开太阳系的,如果外星生命真的降临地球,就只能说明,他们跨越了上万光年的距离来到这里,自然拥有比人类社会更为先进的技术水平。

对于弱小的人类文明而言,在面对外星生命的入侵时,,是没有任何的抵抗之力的。

人们对此不需要过于担心,或许人类也可以和外星生命和谐相处。

川藏318自驾游最佳月份是几月份?这3个月份各有千秋

最近很多人说这个川藏318自驾游应该什么月份去最佳,本来这个问题也还是比较简单的,也比较好理解的,搞清楚地理位置和天气情况就好了。

下面旅泊网小编也简单的给大家介绍介绍,感兴趣的可以一起来看看。

1、3月-4月:走318川藏线3月-4月是可以的,因为这个季节林芝的桃花已经开了,这个是很多人在3月-4月走川藏线的核心真相了,春天的桃花就这个时间看了,错过再等一年。

但是还是建议有越野经验的人去玩了,毕竟这个时间点很多高海拔的地方冰雪都没融化,这个时候去冷不说还是很危险的。

2、5月-6月:5月-6月之间是川藏线最为合适的旅行季节,不管是自驾还是报团还是自由行,都是不错的选择。

因为这个季节去川藏线走318,每一个地方都是鲜花盛开,郁郁葱葱,五颜六色的,当你离去的时候它也凋谢了,似乎是在欢送你。

这是最好的时节了。

3、9月下-10月:这个时间点318川藏线进入秋季了。

雨季也刚好过了。

雨水少了那植被也会变色了,秋季的黄色、红色也迎来了最好时候。

所以这个季节也是川藏线最美季节的。

而且温度也比较合适。

其它月份就不建议去了,11月到次年2月都太冷了,下大雪异常危险,然后7月8月雨水太大了,也极其不安全了。

提醒,318川藏线是高原地区,,一般人去玩是适应不了的,去之前一定要提前做好攻略哦。

不要贸然前往。

加入收藏
               

JS识别各浏览器版本完整实例代码

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录