如何检测使用哪种浏览器访问我的网站?
如何检测用户使用哪个浏览器(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可以告诉我们有关当前浏览器的信息的示例。