多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > 轉變代碼思路:js瀏覽器判斷方法

轉變代碼思路:js瀏覽器判斷方法

來源:程序員人生   發布時間:2014-05-18 14:40:20 閱讀次數:3092次

“變則通,通則達”,在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)

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美激情亚洲激情 | 国产精品视频自拍 | 国产欧美一区二区另类精品 | free性欧美极度另类性性欧美 | 最新欧美精品一区二区三区不卡 | 亚洲资源站| 久久这里是精品 | 一级毛片一级毛片 | 欧美亚洲国产激情一区二区 | 国产精品嫩草影院在线播放 | 国产福利乳摇在线播放 | 日本高清无卡码一区二区久久 | 国产一区二区免费视频 | 俺来也俺去啦久久综合网 | 一本久道热中字伊人 | 久久精品国产一区二区三区 | 黄 色 免 费 网站在线观看 | 国产1区2区3区在线观看 | 国产亚洲视频在线播放大全 | 五月婷网 | 日本aa大片在线播放免费看 | 精品久久久久久久一区二区伦理 | 欧美videos在线观看 | 自拍偷拍第4页 | 激情图片小说区 | 一区二区三区四区在线播放 | 免费一级毛片在级播放 | 国产精品视频一区二区三区 | 亚洲欧美日韩在线 | 久久久久久久国产精品 | 成人欧美一区二区三区黑人 | 中文字幕一区二区三区四区 | 国产成人精品视频 | 欧美18videosex性视频 | 欧美一级视频免费看 | 女人18毛毛片一级毛片 | 自拍网址 | 日本一区二区在线播放 | 亚洲国产成人久久一区久久 | 久久高清一级毛片 | 亚洲欧洲一区二区三区久久 |