代码之家  ›  专栏  ›  技术社区  ›  Bill the Lizard

如何检测用于访问我的网站的浏览器?

  •  3
  • Bill the Lizard  · 技术社区  · 16 年前

    如何检测用户访问我的网站时使用的浏览器(如,firefox、opera)?在javascript、php、asp、python、jsp和任何其他你能想到的例子中都是有用的。有没有一种语言不可知论的方法来获取这些信息?

    11 回复  |  直到 16 年前
        1
  •  10
  •   Hank Gay    16 年前

    如果是为了处理请求,请查看 User-Agent 传入请求的头。

    更新:如果是用于报告,请将Web服务器配置为在访问日志中记录用户代理,然后运行日志分析工具,例如, AWStats .

    更新2:仅供参考 通常 (通常不一定)更改基于用户代理处理请求的方式是个坏主意。

        2
  •  5
  •   prakash    16 年前
        3
  •  3
  •   Wayne    16 年前

    你可以看看 User-Agent 他们发送的。注意,你可以发送任何你想要的代理,所以这不是100%的万无一失,但大多数人不会改变它,除非有特定的原因。

        4
  •  1
  •   Midhat    16 年前

    一个快速又脏的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;
    }
    
        5
  •  1
  •   Erikk Ross    16 年前

    可以在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;
    }
    
        6
  •  1
  •   dirtside    16 年前

    PHP的预定义超级全局数组$_服务器包含一个键“http_user_agent”,它包含在HTTP请求中发送的用户代理头的值。 请记住,这是用户提供的数据,不可信。 很少有用户更改他们的用户代理字符串,但它经常发生。

        7
  •  1
  •   Joshua Carmody    16 年前

    在客户端,您可以使用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");
    }
    
        8
  •  0
  •   stephanea    16 年前

    这可能取决于您的设置。对于Linux上的Apache,它写在访问日志/var/log/apache2/access_日志中

        9
  •  0
  •   Martin08    16 年前

    您可以通过以下方式完成此操作:
    -查看Web服务器日志,或
    -在处理HTML请求(纯文本流)之前查看该请求中的“用户代理”字段。

        10
  •  0
  •   Silver Dragon    16 年前

    首先,我要注意的是,最好避免修补特定的Web浏览器,除非最后一个结果是-尝试实现跨浏览器兼容性,而不是使用标准兼容的HTML/CSS/JS(是的,javascript确实有一个共同的分母子集,可以跨所有主要浏览器工作)。

    尽管如此,HTTP请求头中的用户代理标记包含客户机(声明的)浏览器。虽然这已经成为一个真正的混乱,因为人们工作针对特定的浏览器,而不是规范,所以确定真正的浏览器可能有点棘手。

    与此匹配:

    包含浏览器

    火狐->火狐

    MSIE->Internet Explorer

    Opera->Opera(少数几种不伪装为Mozilla的浏览器之一)

    大多数包含单词“bot”或“crawler”的代理通常是bot(因此您可以从logs/etc中省略它)。

        11
  •  0
  •   Paul Mitchell    16 年前

    退房 browsecap.ini . 链接的网站具有多种脚本语言的文件。browsecap不仅标识了用户代理,还提供了浏览器的CSS支持、JS支持、OS(如果是移动浏览器)等信息。

    巡航 this page 查看browsecap.ini可以告诉您当前浏览器的信息示例。