如何检测什么浏览器(IE,火狐,Opera)的用户访问我的网站? 在Javascript,PHP,ASP,Python和JSP你能想到的例子,任何人将是有益的。 有没有一种语言无关的方式来获得这些信息?
Answer 1:
如果是用于处理请求,看看用户代理对传入的请求头。
更新:如果是用于报告,配置Web服务器登录的用户代理的访问日志,然后运行日志分析工具,例如, AWStats的 。
更新2:仅供参考,它通常是(并非总是如此,通常情况下)一个坏主意,改变你正在处理基于用户代理的请求的方式。
Answer 2:
从各种浏览器的用户代理字符串的综合列表
这份名单是真正的大:)
Answer 3:
你会看看的用户代理 ,他们被发送。 请注意,您可以发送任何你想要的代理,所以这不是100%万无一失,但除非有特殊原因,大多数人并不改变它。
Answer 4:
一个快速和肮脏的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;
}
Answer 5:
您可以在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;
}
Answer 6:
PHP的预定义的超全局数组$ _SERVER包含密钥“HTTP_USER_AGENT”,它包含用户代理报头的值作为HTTP请求发送的。 请记住,这是用户提供的数据,是不被信任。 很少有用户改变他们的用户代理字符串,但它确实发生不时。
Answer 7:
在客户端,您可以使用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");
}
Answer 8:
这可能取决于你的设置。 在Linux上的Apache,书面访问日志在/ var /日志/的Apache2 /访问日志
Answer 9:
你可以这样做:
- 着眼于Web服务器日志,OR
- 处理之前看在HTML请求中的User-Agent字段(它是纯文本流)。
Answer 10:
首先,我想指出,这是最好避免修补针对特定的网络浏览器,除非作为最后的结果 - 尝试实现跨浏览器的兼容性,而不是使用符合标准的HTML / CSS / JS(是的, JavaScript并有一个共同的分母子集,这在所有的主流浏览器)。
随着中说,从HTTP请求报头中的用户代理标签包含客户端的(权利)的浏览器。 虽然这已经成为一个真正的混乱是由于人们的工作针对特定的浏览器,而不是规范,所以确定真正的浏览器可以是一个有点棘手。
对阵这样的:
包含浏览器
火狐 - >火狐
MSIE - > Internet Explorer中
歌剧 - >歌剧院(在一些浏览器,不假装是Mozilla的一个:))
大多数含有“BOT”,或“履带式”的代理商通常是机器人(这样你就可以从日志中忽略它的/ etc)
Answer 11:
退房browsecap.ini 。 链接的网站有多种脚本语言文件。 不仅browsecap识别用户代理,但也有关于浏览器的CSS支持,JS的支持,操作系统,如果它的移动浏览器等信息
巡航到这个页面 ,看看哪些信息的browsecap.ini可以告诉你当前的浏览器的例子。