如何检测使用哪种浏览器访问我的网站?

时间:2020-03-06 14:36:06  来源:igfitidea点击:

如何检测用户使用哪个浏览器(IE,Firefox,Opera)访问我的网站? Javascript,PHP,ASP,Python,JSP以及我们可以想到的任何其他示例均会有所帮助。是否有语言不可知的方式来获取此信息?

解决方案

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

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

更新2:仅供参考,基于User-Agent更改处理请求的方式通常(并非总是如此)是个坏主意。

我们将查看他们正在发送的User-Agent。请注意,我们可以发送所需的任何代理,因此这并不是100%可靠的,但是除非有特殊原因,否则大多数人不会更改它。

它可能取决于设置。在Linux上的apache中,其写在访问日志/ var / log / apache2 / access_log中

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

一个快速而肮脏的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;
}

我们可以在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;
}

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

话虽如此,HTTP请求标头中的用户代理标签包含了客户端的(已声明的)浏览器。尽管由于人们使用特定的浏览器而不是使用规范,这已成为一团糟,但是确定真正的浏览器可能有些棘手。

与此匹配:

包含浏览器

Firefox-> Firefox

MSIE-> Internet Explorer

Opera-> Opera(为数不多的假装为Mozilla的浏览器之一:))

大多数包含单词" bot"或者" crawler"的代理通常是bot(因此我们可以从日志/等中忽略它)

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

列表真的很大:)

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

在客户端,我们可以使用Navigation.userAgent对象在Java脚本中执行此操作。这是一个粗略的例子:

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");
}

请查看browsercap.ini。链接的站点具有用于多种脚本语言的文件。该浏览器不仅可以识别用户代理,还可以提供有关浏览器的CSS支持,JS支持,操作系统(如果是移动浏览器等)的信息。

浏览到此页面,以查看browsercap.ini可以告诉我们有关当前浏览器的信息的示例。