4

如何检测用户访问我的网站时使用的浏览器(IE、Firefox、Opera)?Javascript、PHP、ASP、Python、JSP 以及您能想到的任何其他示例都会有所帮助。是否有一种与语言无关的方式来获取这些信息?

4

11 回答 11

10

如果它用于处理请求,请查看传入请求的User-Agent标头。

更新:如果是用于报告,请将您的 Web 服务器配置为在访问日志中记录 User-Agent,然后运行日志分析工具,例如AWSStats

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

于 2008-09-23T14:21:12.317 回答
5

来自各种浏览器的用户代理字符串的综合列表

清单真的很大:)

于 2008-09-23T14:30:51.997 回答
3

您将查看他们发送的用户代理。请注意,您可以发送您想要的任何代理,因此这不是 100% 万无一失的,但大多数人不会更改它,除非有特定原因。

于 2008-09-23T14:21:45.030 回答
2

一个快速而肮脏的 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;
}
于 2008-09-23T14:25:39.030 回答
1

您可以在 ASP.NET 中使用 HttpBrowserCapabilities 类。这是此链接的示例

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;
}
于 2008-09-23T14:28:15.887 回答
1

PHP 的预定义超全局数组 $_SERVER 包含一个键“HTTP_USER_AGENT”,它包含在 HTTP 请求中发送的 User-Agent 标头的值。 请记住,这是用户提供的数据,不可信任。很少有用户会更改他们的用户代理字符串,但它确实会不时发生。

于 2008-09-23T15:15:26.460 回答
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");
}
于 2008-09-23T18:16:27.040 回答
0

这可能取决于您的设置。在linux上使用apache,它写在访问日志/var/log/apache2/access_log中

于 2008-09-23T14:22:23.717 回答
0

您可以通过以下方式做到这一点:
- 查看 Web 服务器日志,或者
- 在处理 HTML 请求(这是一个纯文本流)中查看 User-Agent 字段。

于 2008-09-23T14:22:59.053 回答
0

首先,我想指出,最好避免针对特定的网络浏览器进行修补,除非作为最后的结果 - 尝试实现跨浏览器兼容性,而不是使用符合标准的 HTML/CSS/JS(是的, javascript 确实有一个公分母子集,适用于所有主要浏览器)。

话虽如此,HTTP 请求标头中的用户代理标记包含客户端(声明的)浏览器。尽管由于人们针对特定浏览器而不是规范工作,这已经变得非常混乱,但确定真正的浏览器可能有点棘手。

与此匹配:

包含浏览器

火狐->火狐

MSIE -> Internet Explorer

Opera -> Opera(少数几个不伪装成 Mozilla 的浏览器之一 :))

大多数包含“bot”或“crawler”的代理通常是机器人(所以你可以从日志/等中省略它)

于 2008-09-23T14:30:06.367 回答
0

查看browsecap.ini。链接的站点包含多种脚本语言的文件。browsecap 不仅识别用户代理,还包含有关浏览器的 CSS 支持、JS 支持、操作系统、移动浏览器等信息。

浏览此页面以查看 browsecap.ini 可以告诉您有关您当前浏览器的信息的示例。

于 2008-09-26T05:41:10.327 回答