十九、用戶端資訊
1、瀏覽器名稱(Browser Name)
Q:我如何檢測瀏覽器名稱。
A:要擷取使用者瀏覽器的實際名稱,你可以用navigator.appName和navigator.userAgent屬性。userAgent屬性比appName更可靠些,例如,Firefox(和其他一些瀏覽器)由於相容Netscape Navigator,因此對navigator.appName可能返回“Netscape”。
下面的代碼執行個體使用navigator.userAgent實現瀏覽器檢測。同時,它也使用了navigator.appName和navigator.appVersion,僅在userAgent返回非期望形式時作為參考。下面就是在你瀏覽器中輸出:
例子中進行瀏覽器檢測的原始碼是:
var nVer = navigator.appVersion;var nAgt = navigator.userAgent;var browserName = navigator.appName;var fullVersion = ''+parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion,10);var nameOffset,verOffset,ix;// In MSIE, the true version is after "MSIE" in userAgentif ((verOffset=nAgt.indexOf("MSIE"))!=-1) { browserName = "Microsoft Internet Explorer"; fullVersion = nAgt.substring(verOffset+5);}// In Opera, the true version is after "Opera" else if ((verOffset=nAgt.indexOf("Opera"))!=-1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset+6);}// In Chrome, the true version is after "Chrome" else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) { browserName = "Chrome"; fullVersion = nAgt.substring(verOffset+7);}// In Safari, the true version is after "Safari" else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { browserName = "Safari"; fullVersion = nAgt.substring(verOffset+7);}// In Firefox, the true version is after "Firefox" else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { browserName = "Firefox"; fullVersion = nAgt.substring(verOffset+8);}// In most other browsers, "name/version" is at the end of userAgent else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) { browserName = nAgt.substring(nameOffset,verOffset); fullVersion = nAgt.substring(verOffset+1); if (browserName.toLowerCase()==browserName.toUpperCase()) { browserName = navigator.appName; }}// trim the fullVersion string at semicolon/space if presentif ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);majorVersion = parseInt(''+fullVersion,10);if (isNaN(majorVersion)) { fullVersion = ''+parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion,10);}document.write('Browser name = '+browserName+'<br>');document.write('Full version = '+fullVersion+'<br>');document.write('Major version = '+majorVersion+'<br>');document.write('navigator.appName = '+navigator.appName+'<br>');document.write('navigator.userAgent = '+navigator.userAgent+'<br>');
2、瀏覽器版本(Browser Version)
Q:如何檢測瀏覽器版本。
A:不幸得是,navigator.appVersion在檢測上瀏覽器版本上並不夠好。例如,在很多支援JavaScript的瀏覽器,navigator.appVersion的值是相容的Netscape Navigator的版本,而不是使用者瀏覽器的實際版本。(甚至,在JavaScript應用的早期,Microsoft Internet Explorer 3的navigator.appVersion的傳回值是2,就意味著它相容於Netscape Navigator2。)
因此,要獲得任何上述瀏覽器的完全版本數,你需要依賴navigator.userAgent的傳回值,就像瀏覽器名稱中的例子。下面就是你的瀏覽器的名稱和版本:
(原始碼見文章瀏覽器名稱)
3、作業系統(Operating System)
Q:如何檢測客戶機上的作業系統。
A:要檢測客戶機上的作業系統,指令碼需要分析navigator.appVersion的值。下面就是一個簡單的例子,它將作業系統的名稱賦給OSName變數。
// This script sets OSName variable as follows:// "Windows" for all versions of Windows// "MacOS" for all versions of Macintosh OS// "Linux" for all versions of Linux// "UNIX" for all other UNIX flavors // "Unknown OS" indicates failure to detect the OSvar OSName="Unknown OS";if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";document.write('Your OS: '+OSName);
在你的作業系統上,這段指令碼的結果是:
(要獲得更詳細的作業系統資訊,指令碼可以對navigator.appVersion做更加複雜的分析,但是原理是一樣。)
4、螢幕尺寸(Screen Size)
Q:如何擷取客戶機的螢幕尺寸。
A:要檢測客戶機的螢幕尺寸,可以使用屬性screen.width和screen.height,這兩個屬性在主要瀏覽器的4上版本都被支援。如果你的使用者使用Netscape Navigator 3並且啟用了Java,你可以用Java調用來獲得螢幕的寬和高(見下面的例子)。
下面的代碼將螢幕的實際寬和高分別賦給了變數screenW和screenH,然後輸出它們的值。如果使用者使用的是舊版瀏覽器,那麼screenW和sreenH就分別被賦值為640和480。
var screenW = 640, screenH = 480;if (parseInt(navigator.appVersion)>3) { screenW = screen.width; screenH = screen.height;}else if (navigator.appName == "Netscape" && parseInt(navigator.appVersion)==3 && navigator.javaEnabled() ) { var jToolkit = java.awt.Toolkit.getDefaultToolkit(); var jScreenSize = jToolkit.getScreenSize(); screenW = jScreenSize.width; screenH = jScreenSize.height;}document.write( "Screen width = "+screenW+"<br>"+"Screen height = "+screenH)
在你的瀏覽器中,代碼輸出為:
5、瀏覽器視窗尺寸(Browser Window Size)
Q:如何擷取瀏覽器視窗的尺寸。
A:要確定瀏覽器視窗的實際尺寸,可以使用下面的屬性 在Netscape Navigator 4中:window.innerWidth、window.innerHeight 在Microsoft Internet Explorer中:document.body.offsetWidth、document.body.offsetHeight
注意,document.body.offsetWidht和document.body.offsetHeight必須在瀏覽器載入<BODY>標籤完成後執行。
在下面的代碼中,winW和winH分別被賦值為實際瀏覽器視窗的寬和高,然後被輸出。如果使用者使用舊版瀏覽器,那麼winW和winH將分別被設為630和460。
var winW = 630, winH = 460;if (parseInt(navigator.appVersion)>3) { if (navigator.appName=="Netscape") { winW = window.innerWidth; winH = window.innerHeight; } if (navigator.appName.indexOf("Microsoft")!=-1) { winW = document.body.offsetWidth; winH = document.body.offsetHeight; }}document.write( "Window width = "+winW+"<br>"+"Window height = "+winH)
在你的瀏覽器中,代碼的執行結果是: