淺談jQuery為哪般去掉了瀏覽器檢測(cè)
由于做HTML5相關(guān)的項(xiàng)目,許多前衛(wèi)時(shí)髦的前端技術(shù)就需要考慮一下IE是否支持。要是在以前,可以很方便地調(diào)用jQuery的jQuery.browser來(lái)實(shí)現(xiàn)。
If(jQuery.browser.msie) alert(“DIE IE!”)
但這一便利在jQuery 1.9之后就不復(fù)存在了。突然覺(jué)得像失去了一個(gè)最親密的戰(zhàn)友,一個(gè)我一搞開發(fā)就離不開的好基友,一個(gè)我離開了就 無(wú)法寫出跨瀏覽器的前端代碼的好工具。一下子我竟不知道該如何是好。
然后每次需要考慮IE的時(shí)候,我就會(huì)去google一下,如何用1.9版本的jQuery來(lái)檢測(cè)IE,但StackOverFlow上的多數(shù)回答都告訴我:jQuery1.9廢掉勒jQuery.browser,建議用jQuery.support,但是沒(méi)有人告訴我為什么。
也不知道那時(shí)我的是不是腦子被門夾了半天反應(yīng)不過(guò)來(lái)為什么給廢掉了,反正我的目的很簡(jiǎn)單,就是需要檢測(cè)當(dāng)前用戶用的是不是IE,如果不是IE,那么我就需要彈出相關(guān)提示信息告訴用戶你正在使用IE,某些功能可能不被支持云云。。。
無(wú)奈,以至于我的編碼回到了那個(gè)沒(méi)有jQuery的石器時(shí)代,用最原始的最plain的JavaScript代碼來(lái)檢測(cè)IE,而關(guān)于這樣的方法,由于有無(wú)數(shù)前輩在與IE的博弈中積累了大量經(jīng)驗(yàn),現(xiàn)成的方法已經(jīng)寫過(guò)N多了,所以我也就隨便揀一個(gè)用著。而且每次用的都還不一樣,下次遇到要檢測(cè)IE的時(shí)候,又去Google一把,得到另一段代碼達(dá)到相同的效果。
但問(wèn)題是覺(jué)得別扭,就為了檢測(cè)一個(gè)IE,就需要專門為此多出一大段丑陋而跟頁(yè)面功能邏輯毫不相關(guān)的代碼。這感覺(jué)像是安裝一個(gè)破解軟件而同時(shí)被捆綁一大批廣告插件一樣。
伴隨最近Windows8.1的發(fā)部隨便關(guān)心了一下隨之而來(lái)的IE11,官方居然說(shuō)這貨會(huì)支持WegGL技術(shù)!IE11將會(huì)支持這個(gè)微軟一直唾棄的技術(shù)了。這其實(shí)還不太讓人奇怪。因?yàn)镮E被前端人員看成奇葩早在IE6時(shí)就開始了,這么多年過(guò)去了,開發(fā)者還不是和它共存了下來(lái)嘛。
但是IE11支持WebGL跟本文的毛線關(guān)系呢?是沒(méi)多大關(guān)系,但我突然意識(shí)到之前HTML5項(xiàng)目中用Three.js寫的東西可以在IE上運(yùn)行了,至少在IE11上!所以之前關(guān)于IE的檢測(cè)顯得很二很不合邏輯。我天靈蓋似乎一道金光冒出,走出了之前的一個(gè)誤區(qū):確實(shí)不需要檢測(cè)用戶使用的是不是IE瀏覽器。我們的目的是要讓代碼正常運(yùn)行。如果當(dāng)前瀏覽器支持我們代碼中的特性,那么就正常運(yùn)行,如果不支持,那就罷工給出提示唄。
所以我似乎理解為什么jQuery在1.9中不支持jQuery.browser了,轉(zhuǎn)而給出了support這個(gè)API,而且當(dāng)我再次搜索“檢測(cè)IE”相關(guān)的問(wèn)題時(shí),也有聲音建議用Modernizr.js(一個(gè)檢測(cè)瀏覽器對(duì)HTML5,CSS3支持情況的JavaScript庫(kù))。
因?yàn)闄z測(cè)IE本身就是不科學(xué)的。盡管一些HTML5特性IE現(xiàn)在不支持,但它在不斷的更新,所以不代表后來(lái)的版本中不支持。所以如果代碼中還存在很直白的專門針對(duì)IE的代碼就顯得相當(dāng)不科學(xué)了。一如上面提到的WegGL瀏覽器中3D相關(guān)的程序,可以預(yù)期,分明能夠在IE11中運(yùn)行,但代碼如果僅僅是檢測(cè)瀏覽器IE就罷工然后很驕傲地彈出個(gè)提示“請(qǐng)換用其他瀏覽器”,IE是不是很無(wú)辜。。。
另外還有個(gè)原因不要只是檢測(cè)瀏覽器是不是IE,那就是各瀏覽器間本身就有差異,有差異是正常的,即使是除了IE外的FireFox,Chrome,Opera, Safari之類的,在各個(gè)Web標(biāo)準(zhǔn)的支持和實(shí)現(xiàn)上也不是完全一致。這也就是為什么一個(gè)樣式在Chrome中調(diào)試正常了,到FF中顯得有點(diǎn)別扭。如果是JavaScript代碼中的差異,是否我們又該寫一段檢測(cè)FF的代碼?;蛘吣程彀l(fā)現(xiàn)在Opera中某個(gè)功能出來(lái)的結(jié)果有偏差,那又要寫一段檢測(cè)Opera的代碼,顯示這種思路是有問(wèn)題的。
這也就是為什么Modernizr.js會(huì)有用武之地的原因。為了確保代碼預(yù)期正常實(shí)現(xiàn),我們需要先檢測(cè)當(dāng)前瀏覽器是否支持該功能,如果支持,okay,代碼正常執(zhí)行,如果不支持,則執(zhí)行另一段代碼。
以上這篇淺談jQuery為哪般去掉了瀏覽器檢測(cè)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
jquery實(shí)現(xiàn)用戶登陸界面(示例講解)
下面小編就為大家?guī)?lái)一篇jquery實(shí)現(xiàn)用戶登陸界面(示例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
跟著JQuery API學(xué)Jquery 之二 屬性
在選擇器的API學(xué)習(xí)中,走馬觀花的把選擇器過(guò)了一遍,但是選擇歸選擇,選擇出來(lái)了沒(méi)干什么事,也沒(méi)有什么用嘛2010-04-04
jQuery.validate 常用方法及需要注意的問(wèn)題
jQuery.validate 常用方法及需要注意的問(wèn)題,需要的朋友可以參考一下2013-03-03
一款jquery特效編寫的大度寬屏焦點(diǎn)圖切換特效的實(shí)例代碼
焦點(diǎn)圖顯示區(qū)域有固定的寬度,當(dāng)前顯示寬度之外是一個(gè)半透明層顯示的其它的焦點(diǎn)圖片,最好的是,此特效兼容ie6以及其它瀏覽器。2013-08-08

