Js之Navigator對象

Window對象的navigator屬性引用的是包含瀏覽器廠商和版本信息的Navigator對象。Navigator對象的命名是爲了記念Netscape以後NavigatorBU覽器譯註2,不過全部其餘的瀏覽器也支持它(IE還支持clientln formation屬性,它做爲navigator的廠商中立同義
詞。遺憾的是,其餘瀏覽器並不支持這一更直觀的屬性命名)。過去,Navigator對象一般被腳本用來肯定它們是在IE中仍是在Netscape中運行。這種瀏覽器嗅探方法有問題,由於它要求隨着新瀏覽器和現有瀏覽器的新版本的引入而不斷地
調整。現在,有一種更好的功能測試方法(參見13.4.3節),只須要測試所須要的功能(即,方法或屬性),而不是偎設特定的瀏覽器版本及其功能。然而,瀏覽器嗅探有時候仍然有價值。這樣的一種狀況是,當須要解決存在於某個特定
的瀏覽器的特定版本中的特殊的bug時。Navigator對象有4個屬性用於提供關於運行中的瀏覽器的版本信息,而且可使用這些屬性進行瀏覽器嗅探。web

appName
Web瀏覽器的全稱。在IE中,這就是「Microsoft Internet Explorer」。在Firefox中,該屬性就是「Netscape」。爲了兼容現存的瀏覽器嗅探代碼,其餘瀏覽器一般也取值爲「Netscape」。
appVersion
此屬性一般以數字開始,並跟着包含瀏覽器廠商和版本信息的詳細字符串。字符串前面的數字一般是4.0或5.0,表示它是第4或第5代兼容的瀏覽器。appVersion字符串沒有標準的格式,因此,沒有辦法直接用它來判斷瀏覽器的類型。
userAgent
瀏覽器.在它的USER-AGENT HTTP頭部中發送的字符串。這個屬性一般包含appVersion中的全部信息,而且經常也可能包含其餘的細節。和appVersion-樣,它也沒有標準的格式。因爲這個屬性包含絕大部分信息,所以瀏覽器嗅探代碼一般用它來嗅探。
platform
在其上運行瀏覽器的操做系統(而且多是硬件)的字符串。Navigator屬性的複雜性正說明了瀏覽器嗅探對於處理客戶端兼容性問題是沒有太大幫助的。在Web的早期,人們寫了大量的瀏覽器特定代碼用於測試相似於navigator.appName
的屬性。在開發新瀏覽器的時候,瀏覽器廠商發現爲了讓現有網站顯示正確,它們須要把appName設置爲「Netscape」。相似的作法使得appVersion的起始數字失去了意義,而如今的瀏覽器嗅探代碼必需要依賴於比以前複雜不少的navigator.userAgent字符串。
例14-3展現瞭如何用正則表達式(摘自iQuery)從navigator.userAgent中抽取瀏覽器名稱和版本號的方法。正則表達式

例14-3:使用navigator.userAgent~-進行瀏覽器嗅探
//爲客戶端嗅探定義browser.name和browser.version,這裏使用了jOuery l.4.1中的代碼
//name和number都是字符串,對於不一樣的瀏覽器輸出的結果也是不同的,檢測結果以下:
J|
//」webkit":Safari或Chrome;版本號是Webkit的版本號
//」opera": Opera;版本號就是軟件的版本號
//「mozilla":Firefox或者其餘基於gecko內核的瀏覽器;版本號是Gecko的版本
//」msie":IE;版本號就是軟件的版本
||
//好比Firefox 3.6返回:{name: "mozilla", version: "1.9.2"}
var browser=(function(){
var s=navigator.userAgent.toLowerCase();
var match=/(webkit)[\/]([\w.]+)/.exec(s) ||
/(opera)(?: .*version)?[\/]([\w.]+)/.exec(s) ||
/(msie)([\w.]+)/.exec(s) ||
/compatible/.test(s)&&/(mozilla)(?:.*rv:([\w.]+))?/.exec(s)I l
[];
相關文章
相關標籤/搜索