加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

转变代码思绪:js赏识器判定要领

发布时间:2018-09-12 02:21:45 所属栏目:创业 来源:站长网
导读:变则通,通则达,在coding的时辰也要做到,偶然辰思绪每每过分于范围性,拿本日写本身的js框架(暂命名为YQ吧,往后文章通用)对赏识器判定要领的实例,来说说代码思绪的转变。 navigator.userAgent说明 关于javascript对赏识器的判定,很早之前我写过一篇

“变则通,通则达”,在coding的时辰也要做到,偶然辰思绪每每过分于范围性,拿本日写本身的js框架(暂命名为YQ吧,往后文章通用)对赏识器判定要领的实例,来说说代码思绪的转变。

navigator.userAgent说明

关于javascript对赏识器的判定,很早之前我写过一篇文章《js判定赏识器的函数,可区分chrome,safari》。YQ框架中也是回收的这个要领,然则其后想到了有位网友说判定火狐的版本号会错误,这是由于火狐的version的判定走了正则,而没有思量到firefox的,着实不止firefox有这个bug。起首来看看火狐的navigator.userAgent:
这个是我的firefox(3.6.15,却表现3.6.8,不知何解,查察关于也是这个题目:版本不同一)

Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 QQDownload/1.7

按照正则的写法,火狐的版本号应该这样写/Firefox[/]([w.]+)/
而safari简直是相同的:

……Version/3.1 Safari/525.13

个中Version为现实的版本号,也是我们常称号的版本号。

琢磨

开始写js判定赏识器的,跟jQuery的$.browser一样,然则版本号会呈现题目,只不外是加了个chrome判定罢了。开始想办理要领,起源想得是通过一个正则工具把赏识器的名称和版本号同一匹配出来,正则工具配置如下:

var browserRegExp = {
			ie:/(msie)[ ]([w.]+)/,
			firefox:/(firefox)[ |/]([w.]+)/,
			chrome:/(chrome)[ |/]([w.]+)/,
			safari:/version[ |/]([w.]+)[ ](safari)/,
			opera:/(opera)[ |/]([w.]+)/
		}


这个工具的计划照旧有必然能力的(后头提到),由于我后头要行使一个遍历,把所有的正则匹配一遍,天生一个相同$.browser的工具。可是细心想想,我们在行使判定的时辰怎么行使呢?无非是下面的行使:

$.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);
  1. 修改了正则,判定是version
  2. 2、判定出来是把i赋值给YQ.browser

这样,我们得到的YQ.browser 就是工具的key,假如IE则YQ.browser 为ie,而不是msie,现实上越发利便影象了,并且不消多余的判定来处理赏罚safari版本号和名称倒置的题目了。

总结

细心调查多想多看会有不少发明的,我有代码洁癖,能少写判定就少写,能罕用轮回就罕用!呵呵。
继承coding YQ……(状态:爱墙写完了,YQ正在搜查ing)

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读