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信息),就无法识别浏览器具体版本了。

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

海底人存在?世界各地发现的海底人踪迹

一直人类都在探寻除了人类之外还是否存在有高智慧的生物,除了对于外星人的研究之后,人类对海底人的研究也没有间断过,究竟海底人是不是真的存在呢,下面一起跟小编去看看吧。

神秘蛤蟆人是不是海底人?1938年东欧波罗的海东岸的沙滩上,一群还海边游玩的人发现了一个不明生物,慢慢走进一瞧发现长相非常奇特,头圆圆的有点像蛤蟆,嘴宽又扁,胸部有点像鸡胸,之后蛤蟆人便发现了他们,以极快的速度跳进海里消失不见,因为事发突然没有留下任何踪迹,只在沙滩上留下一个巨大的类似蛤蟆的掌印。

幽灵潜艇是海底人所为吗?1973年在大西洋斯特里海湾一位船长正在驾驶自己的船航行着,之后他看到水下有幽灵般的潜艇正以极快的速度航行着,从他身边悄然而过。

时隔多年多艘军舰也遇到这个潜艇,军舰多次攻击无效,怪船浮出水面之后,军舰上设备全部失灵了,直达怪船消失才又恢复。

海底人存在吗?1.一种观点认为是海底人是存在的,因为人类最早的起源就是海洋,在现代人类的器官还有些地方保留着这方面的习惯,比如食盐、毛发较少、海生胎记等等,这些也是陆地上哺乳动物所没有的,所以就有人认为在进化过程中产生了分支,一部分上岸一部分还留在水中。

2.另外一种观点则认为海底人不是人类,菜科网,而是栖息在水中的外星人,对于外星人虽然我们知道的很少,但有很多人曾目击到UFO进入水中或者从水中突然出现,而这些生物的智慧似乎也远超人类。

其实到今天为止仍然有很多事情都没有办法去解释一些原因,人类所知甚少还是要不断探索才能发现新的东西,毕竟海洋占据了半个多地球,对于海洋人类算不上什么。

社保缴费各项比例是多少?(4月20日)

孝感社保各基数的缴费比例是多少?和社保网一起来看看,新社通app-社保缴费查询工具提供的最新数据如下:孝感社保缴纳比例公司和个人怎么算养老保险而言:雇主要缴纳通常为16%-20%的份额,而雇员则要支付8%的费用;对于医疗保险,雇主通常要承担6%-10%的费用,而雇员只需要付出2%的费用;在失业保险方面,雇主需承担0.6%-2%的份额,而雇员则需要支付0.4%-1%的费用。

医疗保险:费用由单位和个人共同承担,其中10%由单位缴纳,2%由个人缴纳。

失业保险:单位按基数的1.5%缴纳(2000*1.5%=30元),个人按基数的0.5%扣缴(2000*0.5%=10元),农民工个人不缴费。

职工的工伤保险:单位缴费比例为0.2%-1.9%,个人不用缴纳任何费用。

生育保险:个人不承担缴费,公司承担0.2%左右。

社保缴纳基数是社会保险缴纳的缴费标准,根据基数与系数核定缴纳金额。

社保缴费基数是社会平均工资的60%—300%为缴纳基数,比如社会平均工资是1000元,缴纳的基数可以是600元—3000元。

加入收藏
               

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

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录