2008-09-23 141 views
2

如何檢測用戶正在訪問我的網站的瀏覽器(IE,Firefox,Opera)? Javascript,PHP,ASP,Python,JSP等任何你能想到的例子都會有所幫助。有沒有一種語言不可知的方式來獲取這些信息?如何檢測用於訪問我的網站的瀏覽器?

+0

語言不可知的?從這些例子中,我認爲你有你的答案。 – 2008-09-23 14:21:36

+0

恕我直言,它似乎是一個確切的副本從http://stackoverflow.com/questions/100898/browser-detection – gizmo 2008-09-23 14:21:38

+0

弗蘭克,在這些語言的例子會很好(特別是Javascript和PHP,對我來說),但我想知道是否有辦法做到這一點,並不是針對任何單一語言。 – 2008-09-23 14:23:51

回答

10

如果是處理請求,請查看傳入請求中的User-Agent標頭。

更新:如果是用於報告,請將Web服務器配置爲在訪問日誌中記錄用戶代理,然後運行日誌分析工具,例如AWStats

更新2:僅供參考,通常是(通常不總是)改變處理基於User-Agent的請求的方式的一個壞主意。

3

你會看看他們發送的User-Agent。請注意,你可以發送任何你想要的代理,所以這不是百分之百的萬無一失,但大多數人不會改變它,除非有特定的理由。

0

它可能取決於您的設置。在Linux上的Apache,它寫在訪問日誌/ var /日誌/的Apache2 /訪問日誌

0

你可以這樣做:
- 着眼於Web服務器日誌或
- 看User-Agent字段在處理HTML請求(這是一個純文本流)之前。

1

一個快速和骯髒的Java Servlet實例

private String getBrowserName(HttpServletRequest request) { 
    // get the user Agent from request header 
    String userAgent = request.getHeader(Constants.BROWSER_USER_AGENT); 
    String BrowesrName = ""; 
    //check for Internet Explorer 
    if (userAgent.indexOf("MSIE") > -1) { 
     BrowesrName = Constants.BROWSER_NAME_IE; 
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_FIREFOX) > -1) { 
     BrowesrName = Constants.BROWSER_NAME_MOZILLA_FIREFOX; 
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_OPERA) > -1) { 
     BrowesrName = Constants.BROWSER_NAME_OPERA; 
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_SAFARI) > -1) { 
     BrowesrName = Constants.BROWSER_NAME_SAFARI; 
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_NETSCAPE) > -1) { 
     BrowesrName = Constants.BROWSER_NAME_NETSCAPE; 
    } else { 
     BrowesrName = "Undefined Browser"; 
    } 
    //return the browser name 
    return BrowesrName; 
} 
1

可以在ASP.NET使用的HttpBrowserCapabilities類。下面是這個link

private void Button1_Click(object sender, System.EventArgs e) 
{ 
     HttpBrowserCapabilities bc; 
     string s; 
     bc = Request.Browser; 
     s= "Browser Capabilities" + "\n"; 
     s += "Type = " + bc.Type + "\n"; 
     s += "Name = " + bc.Browser + "\n"; 
     s += "Version = " + bc.Version + "\n"; 
     s += "Major Version = " + bc.MajorVersion + "\n"; 
     s += "Minor Version = " + bc.MinorVersion + "\n"; 
     s += "Platform = " + bc.Platform + "\n"; 
     s += "Is Beta = " + bc.Beta + "\n"; 
     s += "Is Crawler = " + bc.Crawler + "\n"; 
     s += "Is AOL = " + bc.AOL + "\n"; 
     s += "Is Win16 = " + bc.Win16 + "\n"; 
     s += "Is Win32 = " + bc.Win32 + "\n"; 
     s += "Supports Frames = " + bc.Frames + "\n"; 
     s += "Supports Tables = " + bc.Tables + "\n"; 
     s += "Supports Cookies = " + bc.Cookies + "\n"; 
     s += "Supports VB Script = " + bc.VBScript + "\n"; 
     s += "Supports JavaScript = " + bc.JavaScript + "\n"; 
     s += "Supports Java Applets = " + bc.JavaApplets + "\n"; 
     s += "Supports ActiveX Controls = " + bc.ActiveXControls + "\n"; 
     TextBox1.Text = s; 
} 
0

首先的一個樣本,我想指出,這是最好避免修補針對特定的網絡瀏覽器,除非作爲最後的結果 - 嘗試實現跨瀏覽器兼容性而不是使用符合標準的HTML/CSS/JS(是的,JavaScript確實有一個共同的分母子集,它適用於所有主流瀏覽器)。

即便如此,來自HTTP請求標頭的用戶代理標籤包含客戶端(聲明的)瀏覽器。儘管由於人們針對特定的瀏覽器而不是規範,這已經變得非常糟糕,所以確定真正的瀏覽器可能有點棘手。

對陣這樣的:

包含瀏覽器

火狐 - >火狐

MSIE - > Internet Explorer的

歌劇院 - >歌劇院(爲數不多的瀏覽器之一,這不假裝爲Mozilla :))

大多數包含「bot」或「crawler」字樣的代理通常都是機器人(因此您可以從lo GS /等)

1

PHP的預定義超全局數組$ _ SERVER包含密鑰「HTTP_USER_AGENT」,其中包含了用戶代理頭的值作爲發送HTTP請求。 請記住,這是用戶提供的數據,不被信任。很少有用戶更改他們的用戶代理字符串,但它確實會不時發生。

1

在客戶端,您可以使用navigation.userAgent對象在Javascript中執行此操作。這裏有一個最原始的例子:

if (navigator.userAgent.indexOf("MSIE") > -1) 
{ 
    alert("Internet Explorer!"); 
} 
else if (navigator.userAgent.indexOf("Firefox") > -1) 
{ 
    alert("Firefox!"); 
} 

更詳細和全面的例子可以在這裏找到:http://www.quirksmode.org/js/detect.html

請注意,如果你正在做的瀏覽器檢測的JavaScript兼容性起見,通常最好只需使用對象檢測或try/catch塊,以免某些版本沒有考慮到腳本的裂縫。 例如,而不是做這個...

if(navigator.userAgent.indexOf("MSIE 6") > -1) 
{ 
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
else 
{ 
    objXMLHttp = new XMLHttpRequest(); 
} 

...這是更好的:

if(window.XMLHttpRequest) // Works in Firefox, Opera, and Safari, maybe latest IE? 
{ 
    objXMLHttp = new XMLHttpRequest(); 
} 
else if (window.ActiveXObject) // If the above fails, try the MSIE 6 method 
{ 
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
0

退房browsecap.ini。鏈接的站點具有用於多種腳本語言的文件。瀏覽器不僅可以識別用戶代理,還可以瀏覽器的CSS支持,JS支持,操作系統,如果它的手機瀏覽器等信息。

巡航到this page看到什麼信息的例子browsecap.ini可以告訴你關於你當前的瀏覽器。

相關問題