转变代码思绪:js赏识器判定要领
“变则通,通则达”,在coding的时辰也要做到,偶然辰思绪每每过分于范围性,拿本日写本身的js框架(暂命名为YQ吧,往后文章通用)对赏识器判定要领的实例,来说说代码思绪的转变。 navigator.userAgent说明关于javascript对赏识器的判定,很早之前我写过一篇文章《js判定赏识器的函数,可区分chrome,safari》。YQ框架中也是回收的这个要领,然则其后想到了有位网友说判定火狐的版本号会错误,这是由于火狐的version的判定走了正则,而没有思量到firefox的,着实不止firefox有这个bug。起首来看看火狐的navigator.userAgent:
按照正则的写法,火狐的版本号应该这样写/Firefox[/]([w.]+)/
个中Version为现实的版本号,也是我们常称号的版本号。 琢磨开始写js判定赏识器的,跟jQuery的$.browser一样,然则版本号会呈现题目,只不外是加了个chrome判定罢了。开始想办理要领,起源想得是通过一个正则工具把赏识器的名称和版本号同一匹配出来,正则工具配置如下: var browserRegExp = { ie:/(msie)[ ]([w.]+)/, firefox:/(firefox)[ |/]([w.]+)/, chrome:/(chrome)[ |/]([w.]+)/, safari:/version[ |/]([w.]+)[ ](safari)/, opera:/(opera)[ |/]([w.]+)/ }
$.browser.msie&&$.browser.version==='6.0' 第一次转变,行使要领的转变上面的行使要领,然则转变为下面的行使要领: $.browser==='msie'&&$.browserVersion==='6.0' $.browser为赏识器的名称,$.browserVersion为版本号,这样就不消行使的时辰每次都走正则判定,进步了服从。 第二次转变,函数写法的转变按照上面的说明,我们必要先判定出来赏识器名称和版本号,然后别离给$.browser、$.browserVersion赋值,于是有了下的YQ代码: for(var i in browserRegExp){ var match = browserRegExp[i].exec(ua); if(match){ YQ.browser = match[1]; YQ.browserVersion = match[2]; break; } } 前面提到了小能力,就是把用户群体大赏识器放在前面,镌汰轮回次数,IE在海内必定是第一啦,其次FF,chrome……依次下来。 第三次转变:不知道咋说了仔细的童鞋应该看到了safari判定出来YQ.browser和YQ.browserVersion是相反的,要办理这个题目,就来了第三次转变!语文欠好,不知道咋嗣魅这次转变了,直接上代码: var ua = navigator.userAgent.toLowerCase(), browserRegExp = { ie:/msie[ ]([w.]+)/, firefox:/firefox[ |/]([w.]+)/, chrome:/chrome[ |/]([w.]+)/, safari:/version[ |/]([w.]+)[ ]safari/, opera:/opera[ |/]([w.]+)/ }; YQ.browser = 'unknow'; YQ.browserVersion = '0'; for(var i in browserRegExp){ var match = browserRegExp[i].exec(ua); if(match){ YQ.browser = i; YQ.browserVersion = match[1]; break; } } alert(YQ.browser); alert(YQ.browserVersion);
这样,我们得到的YQ.browser 就是工具的key,假如IE则YQ.browser 为ie,而不是msie,现实上越发利便影象了,并且不消多余的判定来处理赏罚safari版本号和名称倒置的题目了。 总结细心调查多想多看会有不少发明的,我有代码洁癖,能少写判定就少写,能罕用轮回就罕用!呵呵。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |