亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

JavaScript 特性檢測與瀏覽器嗅探

2024-04-27 15:06:57
字體:
來源:轉載
供稿:網友

Internet上充斥著各種操作系統和各種版本的瀏覽器,每種瀏覽器都有自己的BOM和獨有的特性。因此,保證頁面在所有瀏覽器上正常運行是非常重要的,或者至少可以正常退出,例如顯示一個消息建議用戶升級瀏覽器。 有兩種方法可以測試瀏覽器是否可以執行代碼:特性檢測和瀏覽器嗅探。它們的最終目標類似,測試給定的瀏覽器是否執行代碼,但它們用于不同的目的。

特性檢測

并非所有的瀏覽器都支持相同的特性,這里的特性是指對于javaScript開發人員而言可以在代碼中訪問和使用的特性。特性檢測是指檢測瀏覽器是否支持某個給定特性的過程,該方法是瀏覽器檢測的首選方法。使用該方法時,需要做少許的維護工作,所有實現(或不實現)特定特性的瀏覽器都使用這種方法來檢測代碼的執行。

特性檢測的模式很簡單:首先檢查特性是否存在,如果存在,就使用該特性。因此,使用一個if語句即可實現,如下所示:

if(navigator.geolocation){ //user geolocation}

這段代碼將navigator.geolocation用作if語句的條件。在不支持geolocation的瀏覽器中,navigator.geolocation為undefined,因此值為falsey。

盡管if語句的條件值應被設為true或false,但Javascript可以將任何值當作true或false。我們稱這些值為truthy和falsey。它們并不是真正的布爾值,但用在條件語句中時,其結果就為true或false了。 以下值為falsey:

0 ”” (一個空字符串) null undefined [ ] (一個空數組) false 除了上面的值,其他值都為truthy。

上面的這種方式令人困惑,也給代碼增加了歧義性。現在應盡量避免使用truthy/falsey語句,而是選擇使用typeof運算符,如下所示:

if(typeof navigator.geolocation!="undefined"){ //use geolocation }

typeof運算符返回一個說明值或對象類型的字符串。在支持geolocation的瀏覽器中,類型為”object”,而在不支持geolocation其他瀏覽器中,類型則為”undefined”。

對于任何對象或值都可以使用typeof運算符。如下表給出了typeof可能返回的值:

語句 結果
typeof() 1 數字number
typeof() “hello” 字符串string
typeof() true 布爾值boolean
typeof() [](或 任何數組) 對象object
typeof() {}(或 任何對象) 對象object
typeof() undefined 未定義undefined
typeof() null 對象object

==

document.write(typeof 1+"<br>"); document.write(typeof "hello"+"<br>"); document.write(typeof true+"<br>"); document.write(typeof [1,2]+"<br>"); document.write(typeof undefined+"<br>"); document.write(typeof null+"<br>");

輸出結果為: number string boolean object undefined object

特性檢測方法特別有用,使用該方法可以將支持或不支持特性的瀏覽器分離開來。瀏覽器制造商并非都很完美,有時他們發布的瀏覽器版本具有唯一且古怪的功能。這樣,就需要區分單個瀏覽器,使用特性檢測就可以很好地實現這一點。

瀏覽器嗅探

在大多數情況下,首選使用特性檢測方法。瀏覽器嗅探方法具有許多缺陷,其中之一就是少數瀏覽器可能宣稱自己是某主流瀏覽器,其實并不是那種瀏覽器類型。另外一個問題是瀏覽器嗅探依賴于瀏覽器的userAgent字符串(user-agent string),該字符串用于標識瀏覽器,且瀏覽器制造商可以在不同的版本之間進行大幅度的修改。僅擋針對其有古怪行為的單個瀏覽器時,才使用瀏覽器嗅探技術。 navigator對象的appName屬性和userAgent屬性在標識瀏覽器方面很有用。appName屬性將返回瀏覽器的模型,如對IE返回Microsoft Internet Explorer,對Firefox,Chrome和Safari返回Netscape。 userAgent屬性返回一個包含多段信息的字符串,如瀏覽器的版本,操作系統和瀏覽器模型。但是,這個屬性的返回值因瀏覽器而異。例如,瀏覽器的版本被嵌入在該字符串的不同位置。

例如在chrome獲取userAgent字符串: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36

從這個字符串中可以得知使用的是windows10 64位操作系統,Chrome 54.0版本的瀏覽器。AppleWebKit好像是瀏覽器內核。后續的操作獲取瀏覽器信息都是根據這個字符串來進行的。

例如:

<script> function getBrowserName(){ var browser=navigator.userAgent; if(browser.indexOf("MSIE")>=0){ return "MSIE"; }else if(browser.indexOf("Firefox")>=0){ return "Firefox"; }else if(browser.indexOf("Chrome")>=0){ return "Chrome"; }else if(browser.indexOf("Safari")>=0){ return "Safari"; }else if(browser.indexOf("Opera")>=0){ return "Opera"; }else{ return "UNKNOWN"; } } function getBrowerVersion() { var ua=navigator.userAgent; var browser=getBrowserName(); var findIndex=ua.indexOf(browser)+browser.length+1; var browserVersion=parseFloat(ua.substring(findIndex,findIndex+3)); return browserVersion; } var browserName=getBrowserName(); var browserVersion=getBrowerVersion(); document.write(browserName+" "+browserVersion); </script>

在Chrome中輸出: Chrome 54 在Opear中輸出: Chrome 55 在Firefox中輸出: Firefox 50

通過使用indexOf來搜索檢測是否存在某些關鍵字,如MSIE或者Firefox,通常就可以確定瀏覽器的名稱。只需要觀察navifator.userAgent返回的字符串,查找瀏覽器名稱或者唯一標識瀏覽器的子串。在userAgent字符串中,瀏覽器的版本信息通常緊跟在瀏覽器名稱之后。有了瀏覽器的名稱和版本信息,就可以利用這些信息過濾用戶當前運行的瀏覽器,從而來檢測判斷該瀏覽器是否具有某種特性。 注意:除針對單個瀏覽器外,不能依賴于瀏覽器嗅探技術。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久中文字幕| 国产91精品青草社区| 亚洲精品久久久久久下一站| 久久久久九九九九| 日韩成人在线视频网站| 久久九九有精品国产23| 亚洲精品xxxx| 欧美日韩国产精品| 成人av在线网址| 欧洲精品在线视频| 日韩av免费在线播放| 成人免费观看49www在线观看| 亚洲国产精品人人爽夜夜爽| 亚洲国产精品资源| 日韩电影网在线| 亚洲成人黄色网址| 色婷婷av一区二区三区久久| 亚洲最新中文字幕| 在线观看视频99| 午夜精品蜜臀一区二区三区免费| 91探花福利精品国产自产在线| 日韩一区二区三区xxxx| 久热精品视频在线观看一区| 成人激情av在线| 国产综合久久久久久| 日韩美女视频免费在线观看| 91网站免费观看| 精品欧美国产一区二区三区| 97在线看福利| 国产精品27p| 国产精品久久久久久久久男| 欧美黑人巨大精品一区二区| 日韩欧美在线国产| 亚洲成在人线av| 国产亚洲美女精品久久久| 国产成人精品一区二区在线| 亚洲乱亚洲乱妇无码| 久久夜色精品国产欧美乱| 久久久亚洲欧洲日产国码aⅴ| 91在线无精精品一区二区| 亚洲美女喷白浆| 在线a欧美视频| 日韩av综合网站| 国产精品丝袜久久久久久不卡| 日韩视频在线免费| 成人福利网站在线观看| 亚洲国产精彩中文乱码av| 国产精品稀缺呦系列在线| 亚洲黄色av网站| 高跟丝袜一区二区三区| 国产精品入口福利| 欧美视频在线看| 国产精品第一页在线| 亚洲午夜av电影| 日韩中文字幕免费| 日韩动漫免费观看电视剧高清| 国产亚洲视频在线| 色av吧综合网| 国模gogo一区二区大胆私拍| 中文字幕欧美日韩va免费视频| 国产精品一区专区欧美日韩| 亚洲精品美女视频| 久久久91精品国产一区不卡| 国产美女被下药99| 97色伦亚洲国产| 最新亚洲国产精品| 日韩精品福利网站| 欧美大片第1页| 欧美亚洲国产成人精品| 有码中文亚洲精品| 亚洲精选中文字幕| 国产精品亚洲一区二区三区| 亚洲国产精品人人爽夜夜爽| 欧美一区二区大胆人体摄影专业网站| 国产在线观看精品一区二区三区| 国产精品视频免费在线| 亚洲欧美另类自拍| 久久久亚洲成人| 国产精品久久久av| 91精品视频观看| 国产精品美女免费视频| 日韩经典第一页| 色噜噜久久综合伊人一本| 日韩av手机在线观看| 国产精品视频内| 日韩专区在线观看| 成人国产精品av| 亚洲高清色综合| 国产一区二区精品丝袜| 久久男人av资源网站| 国产精品99蜜臀久久不卡二区| 欧美乱大交xxxxx| 国产精品久久久久久久久久久久久| 日本成人黄色片| 日韩精品一区二区视频| 日本在线精品视频| 91地址最新发布| 综合av色偷偷网| 久久人91精品久久久久久不卡| 97色在线播放视频| 亚洲最大福利视频网| 成年无码av片在线| 国产日韩中文字幕在线| 91精品国产综合久久香蕉的用户体验| 精品偷拍一区二区三区在线看| 久久久久久久久久久成人| 成人羞羞国产免费| 色婷婷成人综合| 亚洲人成人99网站| 精品国产91乱高清在线观看| 日韩欧美成人区| 欧美区在线播放| 91精品国产99久久久久久| 2019中文字幕在线| 亚洲性生活视频在线观看| 欧美激情视频网址| 91精品国产91久久久久久最新| 欧美亚洲另类在线| 日韩在线免费高清视频| 国产精品视频成人| 欧美激情a∨在线视频播放| 久久久久久国产精品| 久久国产天堂福利天堂| 伊人男人综合视频网| 大胆欧美人体视频| 国产精自产拍久久久久久| 在线日韩日本国产亚洲| 自拍偷拍亚洲一区| 国产精品网红直播| 日本久久中文字幕| 欧美另类极品videosbest最新版本| 亚洲欧美制服第一页| 国内精品伊人久久| 一区二区三区亚洲| 日韩精品在线观看一区二区| 成人妇女淫片aaaa视频| 色综合色综合久久综合频道88| 亚洲美女av在线| 日韩精品亚洲视频| 亚洲欧美激情另类校园| 久久香蕉国产线看观看av| 欧美黑人极品猛少妇色xxxxx| 九九热99久久久国产盗摄| 欧美黄色片视频| 亚洲天堂免费视频| 日本久久久a级免费| 国内免费久久久久久久久久久| 久久99视频免费| 日韩中文字幕在线| 精品亚洲一区二区三区在线观看| 国产精品一区二区三区久久| 国产精品18久久久久久首页狼| 91在线免费看网站| 中文字幕在线精品| 国产亚洲精品久久久久久| 国产一区二区日韩| 国产中文欧美精品| 国内偷自视频区视频综合| 91久久综合亚洲鲁鲁五月天| 日韩av一区二区在线观看| 成人中文字幕在线观看| 欧美激情精品久久久久久变态| 亚洲网站视频福利| 国产精品免费观看在线|