javascript檢測瀏覽器版本的方法
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一、識別瀏覽器是否支持某些特性 為了避免腳本在一些老版本的瀏覽器中出現(xiàn)問題,需要檢查一下代碼在那些瀏覽器中是否能夠執(zhí)行,這樣做是很有必要的。在對某一瀏覽器檢測就是為了確定代碼是否可以在客戶端上正常運(yùn)行,因此,我們要將精力放在“檢測瀏覽器可以做什么”上面,從需求方面來講,這樣做比“檢測當(dāng)前的瀏覽器是什么版本的何種瀏覽器”得到的效果會更好。要檢測腳本是否可以在某瀏覽器上正常運(yùn)行,簡單的辦法就是檢測當(dāng)前瀏覽器是否具有腳本中所需的特性,這樣檢測不僅簡單,而且比直接檢測瀏覽器更有意義。一定要用 typeof 來進(jìn)行測試,杜絕用 if 來判斷(要注意的一點(diǎn)是檢測的如果是方法或者是函數(shù)不要帶參數(shù),否則,就變成了檢測返回值); www~phperz~com var xmlHttpExists = typeof XMLHttpRequest; 而且這種測試方法還可以為那些不支持某些特性的瀏覽器提供相應(yīng)的代碼; if(typeof document.designMode != 'undefined'){ document.designMode = "on"; }else{ ........... } phperz.com 二、識別特殊的瀏覽器 雖然前面介紹的那種特性檢測法很好,但是有的時候,瀏覽器可能以不正確的方式實(shí)現(xiàn)了某些特性,(即特性存在,只不過是返回的值不一樣),下面有一個函數(shù),結(jié)合了已知的特性識別方法和用戶代理信息方法,這樣即使某些瀏覽器使用了欺騙手段(模仿了另一種瀏覽器的用戶代理字符串),仍可以準(zhǔn)確無誤地將它識別出來: phperz~com function identifyBrowser(){ var agent = navigator.userAgent.toLowerCase(); if ( typeof navigator.vendor != 'undefined' && navigator.vendor == 'KDE' && typeof window.sidebar != 'undefined'){ return "kde"; }else if(typeof window.opera != "undefined"){ var version = parseFloat(agent.replace(/.*opera[\/]([^ $]+).*/,"$1")); if(version >= 7){ return "opera7"; }else if(version >=5){ return "opera5"; } return false; }else if(typeof document.all != 'undefined'){ phperz.com if(typeof document.getElementById != 'undefined'){ var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/,"$1").replace(/ /,""); if(typeof document.uniqueID != 'undefined'){ if(browser.indexOf("5.5") != -1){ return browser.replace(/(.*\.5).*/,"$1"); }else{ return browser.replace(/(.*)\..*/,"$1"); } www~phperz~com }else{ return "ie5mac"; } } return false; }else if(typeof document.getElementById != 'undefined'){ if(navigator.vendor.indexOf("Apple Computer,Inc.") != -1){ if(typeof window.XMLHttpRequest != 'undefined'){ return "safari1.2"; } return "safari1"; }else if(agent.indexOf("gecko") != -1){ php程序員站 return "mozilla"; } } return false; } www~phperz~com 說明: 應(yīng)為navigator.vendor 為 'KDE' 的瀏覽器只有一種,那就 konqueror,因?yàn)?konqueror 3.2以前的版本提供的功能不完善,所以只需要檢測該版本以及以后版本就可以了,上述的代碼通過 window.sidebar 對象進(jìn)行檢測來實(shí)現(xiàn)這一點(diǎn)的,因?yàn)樵搶ο笾挥?.2以后的版本才可用。 www.phperz.com 接下來,對opera 的檢測,盡管它傾向于偽裝成其他的瀏覽器,但是opera 是唯一具有 window.opera 對象的唯一瀏覽器。 www~phperz~com 完成opera的檢測,就可以放心的運(yùn)行 document.all的測試了,這是 IE 的一個屬性,但是由于兼容性的原因 Opera 也使用這個屬性,不過其他的瀏覽器都沒有使用 document.all ,所以區(qū)分 ie 和其他的瀏覽器的一個好方法就是查看 document.all ,跟前面一樣,完成這個判斷之后,就可以安全地檢查用戶代理的字符串中是否含有'msie'了。在這個階段,也可以將window下的 IE 和 Mac 操作系統(tǒng)下使用 ie 區(qū)分出來,因?yàn)楹笳邲]有其他版本ie所具有的 document.uniqueID 屬性,所以如果這個屬性不存在,那么客戶端使用的 Mac 操作系統(tǒng)。 phperz.com 完成以上之后,就可以通過 doucment.getElementByID 將所有的老版本瀏覽器過濾掉,任何不支持該方法的瀏覽器幾乎不支持 javascript ,所以對那些瀏覽器的過濾很合理的。如果瀏覽器支持這個方法,那么 Mozilla 和 safari 就可以被區(qū)分開來了。 phperz.com 盡管Safari 和MOzilla 非常相似,(甚至在用戶代理字符串中都包含了"gecko"),但是它的 navigator.vendor 值總是 "Apple Computer,Inc".另外 Safari1.2版本相對于以前的版本有明顯的改善,包括對XMLHttpRequest的支持,所以如果我們確實(shí)需要這個版本的safari,檢測一下這個版本還是很值得的。 php程序員站 排除了 Safari 之后,就可以利用用戶代理中的"gecko" 來檢測Mozilla了,這個引擎的變種很多,這些變體的版本通常很難檢測,但是如果確實(shí)想要支持它,則簡單的通過 navigator.userAgent 判斷即可。 www~phperz~com 對于上面沒有提到的瀏覽器,我們就可以認(rèn)為他們不支持Javascript和Dom,最后以返回false的方式處理。 www.phperz.com 調(diào)用以上的函數(shù),會返回一個字符串,該字符串 會給出瀏覽器的類型以及版本。 下面的列表列出了,在不同瀏覽器下的返回值 www~phperz~com 瀏覽器 identifyBrowser返回的字符串 Unsupported browsers false Konqueror3.2及以上版本 "kde" Opera 5和Opera 6 "opera5" Opera 7及以上版本 "opera7" Internet Explorer5 "ie5" 基于mac的Internet Explorer5 "ie5mac" Internet Explorer5.5 "ie5.5" Internet Explorer6及以上版本 "ie6","ie7",etc Mozilla/FireFox "mozilla" Safari1.0和1.1 "safari1" Safari1.2+ "safari2" phperz.com 除了識別瀏覽器之外,有時候?yàn)榱私鉀Q問題,需要知道瀏覽器在什么操作系統(tǒng)下運(yùn)行,這個信息就包括在用戶代理字符串中,不過它的檢測比較簡單 php程序員之家 function identifyOS(){
var agent = navigator.userAgent.toLowerCase(); if (agent.indexOf("win") != -1){ return "win"; }else if(agent.indexOf("mac") != -1){ return "mac"; }else{ return "unix"; } return false; } 該文章在 2011/11/29 9:28:45 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |