什么是最好/最简单的最准确的方式来检测浏览器的用户?

易可扩展性和执行是一个加。

较少使用的技术,更好。

该解决方案能够服务器方、客户身边,或两者。结果应最终端服务器,虽然。

该解决方案可能的框架不可知论者。

该方案将只用于报告目的。

有帮助吗?

解决方案

在服务器你几乎局限于简串的浏览器提供的(其是充满问题,有一个阅读有关的 简串的历史).

在客户(即在Javascript),你有更多的选择。但最好的选择是实际上不担心工作的浏览器。简单地检查,以确保无论你想要使用实际存在。

例如,可能需要使用setCapture,这只MSIE提供:

if (element.setCapture) element.setCapture()

而不是什么浏览器,然后推断其能力,我们简单地看到,如果它支持的东西之前使用它-谁知道什么浏览器将支持什么样的未来,你真的想要回去和更新你的脚本,如果Safari决定支持setCapture?

其他提示

JQuery Browser Plugin 将做客户的侧为你。

是什么s Browser Plugin?

S Browser Plugin是一个插件。这使得它很容易的唯一标识你的访问者浏览器。

它有什么作用?

它给你一个目javascript中包含的所有信息有关的浏览器被使用。它还增加了CSS浏览器选择的,这意味着你可以式件或写入功能,用于具体的浏览器,浏览器版本的布局,布局版本,甚至操作系统。图像的s Browser Plugin行动。

插在使 $.browser 可以,你可以重新提交给你的服务器经由阿贾克斯呼叫,如果你真的需要它的服务器。

alert($.browser.name);  // Alerts Firefox for me

插件将只会有效,因为将浏览器这是经过测试的反对,但是。插件,上面列出了一个列表中的 浏览器公认在这的试验, 但总是有的风险,即一个新的浏览器将来溜出(谷歌铬..),这将需要重新写的识别规则。这就是说,这个插件似乎是定期更新。

当使用javascript: 不用浏览器检测

编写代码,测试本身对给定的情况下表现出通过浏览器,否则,你将只能编写代码,用于一个非常非常小的人口。它能够更好地使用 "typeof foo == 'undefined'" 和浏览器的特定的技巧,你需要他们。

jQuery此,所有超过它的代码(如果你看码你会看到它实施的行为对于不同的浏览器技术有)

其更好地在长期运行。

因为我刚刚发布了这个(现在-删除的问题),它仍然是粘贴在我的缓冲器,我只是重新发布。注:这是一个服务器的端PHP解决方案

我目前使用的以下代码这一点。这不是几乎用尽解决方案,但是应该可以很容易地实现更多的浏览器。我不知道 user-agents.org (谢谢PConroy),"一个这些天,"我再循环通过它,看看如果我可以更新并加入到我的名单。

define("BROWSER_OPERA","Opera");
define("BROWSER_IE","IE");
define("BROWSER_OMNIWEB","Omniweb");
define("BROWSER_KONQUEROR","Konqueror");
define("BROWSER_SAFARI","Safari");
define("BROWSER_MOZILLA","Mozilla");
define("BROWSER_OTHER","other");

$aBrowsers = array
(
  array("regexp" => "@Opera(/| )([0-9].[0-9]{1,2})@", "browser" => BROWSER_OPERA, "index" => 2),
  array("regexp" => "@MSIE ([0-9].[0-9]{1,2})@", "browser" => BROWSER_IE, "index" => 1),
  array("regexp" => "@OmniWeb/([0-9].[0-9]{1,2})@", "browser" => BROWSER_OMNIWEB, "index" => 1),
  array("regexp" => "@(Konqueror/)(.*)(;)@", "browser" => BROWSER_KONQUEROR, "index" => 2),
  array("regexp" => "@Safari/([0-9]*)@", "browser" => BROWSER_SAFARI, "index" => 1),
  array("regexp" => "@Mozilla/([0-9].[0-9]{1,2})@", "browser" => BROWSER_MOZILLA, "index" => 1)
);

foreach($aBrowsers as $aBrowser)
{
  if (preg_match($aBrowser["regexp"], $_SERVER["HTTP_USER_AGENT"], $aBrowserVersion))
  {
    define("BROWSER_AGENT",$aBrowser["browser"]);
    define("BROWSER_VERSION",$aBrowserVersion[$aBrowser["index"]]);
    break;
  }
}

丹说:它取决于使用的技术。

PHP server侧浏览器检测我建议Harald希望的浏览器检测:

http://techpatterns.com/downloads/php_browser_detection.php

发表下GPL。

不用浏览器检测:

  • 浏览器检测是不是100%可靠的,在最好的时代,但事情变得更糟比这样的:
  • 有很多变的浏览器(MSIE定制等)
  • 浏览器能撒谎他们的身份(歌剧真的有这个功能的内置)
  • 关隐藏或模糊的浏览器的标识
  • 定制和网关供应商编写他们自己的垃圾在垃圾用户代理

这是更好地做到功能检测在客户机-脚本。你希望只需浏览器的检测工作围绕一个错误,在一个特定的浏览器和版本。

我原本要求的问题,因为我希望能够记录的浏览器和操作系统使用的人访问我的网站。是的,用户代理串不可信任的,是的,你不应该使用浏览器检测以确定是什么代码运行在JS,但是,我想尽可能准确的统计数据。

我做了以下。

我使用一个组合JavaScript and PHP记录的统计数据。JavaScript确定什么浏览器和操作系统(作为这是 大概 最精确),并PHP记录:

JavaScript来自 Quirksmode, PHP是相当不言自明的。我用的 JS框架。

增加以下BrowserDetect脚本:

window.addEvent('domready', function() {
    if (BrowserDetect) {
        var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS;
        var query = 'record_browser.php'
        var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post();
    }
});

这确定了浏览器,浏览器和操作系统版本的用户浏览器,并将它发送给 record_browser.php 脚本。的 record_browser.php 脚本,只是添加的信息,随着PHP session_id 和前 user_id, ,如果存在的话。

MySQL表:

CREATE TABLE `browser_detects` (
  `id` int(11) NOT NULL auto_increment,
  `session` varchar(255) NOT NULL default '',
  `user_id` int(11) NOT NULL default '0',
  `browser` varchar(255) NOT NULL default '',
  `version` varchar(255) NOT NULL default '',
  `os` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `sessionUnique` (`session`)
)

PHP Code:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $session = session_id();
    $user_id = isset($user_id) ? $user_id ? 0;
    $browser = isset($_POST['browser']) ? $_POST['browser'] ? '';
    $version = isset($_POST['version']) ? $_POST['version'] ? '';
    $os = isset($_POST['os']) ? $_POST['os'] ? '';
    $q = $conn->prepare('INSERT INTO browser_detects (`session`, `user`, `browser`, `version`, `os`) VALUES (:session :user, :browser, :version, :os)');
    $q->execute(array(
                    ':session' => $session,
                    ':user' => $user_id,
                    ':browser' => $browser,
                    ':version' => $version,
                    ':os' => $os
                ));
}

正如很多,浏览器检测可以去非常错误...然而在利益码的高尔夫球。

这是一个非常快速的方式来检测。

<script>
  if('\v'=='v'){
    alert('I am IE');
  } else {
    alert('NOT IE');
  }
</script>

它漂亮整洁的实际,因为它拿出即没有跳闸了在歌剧院。

奖励点如果你知道 为什么 这一工作在即。;-)

这是C#码我用,我希望将是有帮助的。

StringBuilder strb = new StringBuilder();
strb.AppendFormat ( "User Agent: {0}{1}", Request.ServerVariables["http_user_agent"].ToString(), Environment.NewLine );
strb.AppendFormat ( "Browser: {0}{1}", Request.Browser.Browser.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Version: {0}{1}", Request.Browser.Version.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Major Version: {0}{1}", Request.Browser.MajorVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Minor Version: {0}{1}", Request.Browser.MinorVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Platform: {0}{1}", Request.Browser.Platform.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "ECMA Script version: {0}{1}", Request.Browser.EcmaScriptVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Type: {0}{1}", Request.Browser.Type.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "-------------------------------------------------------------------------------{0}",  Environment.NewLine );
strb.AppendFormat ( "ActiveX Controls: {0}{1}", Request.Browser.ActiveXControls.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Background Sounds: {0}{1}", Request.Browser.BackgroundSounds.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "AOL: {0}{1}", Request.Browser.AOL.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Beta: {0}{1}", Request.Browser.Beta.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "CDF: {0}{1}", Request.Browser.CDF.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "ClrVersion: {0}{1}", Request.Browser.ClrVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Cookies: {0}{1}", Request.Browser.Cookies.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Crawler: {0}{1}", Request.Browser.Crawler.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Frames: {0}{1}", Request.Browser.Frames.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Tables: {0}{1}", Request.Browser.Tables.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "JavaApplets: {0}{1}", Request.Browser.JavaApplets.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "JavaScript: {0}{1}", Request.Browser.JavaScript.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "MSDomVersion: {0}{1}", Request.Browser.MSDomVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "TagWriter: {0}{1}", Request.Browser.TagWriter.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "VBScript: {0}{1}", Request.Browser.VBScript.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "W3CDomVersion: {0}{1}", Request.Browser.W3CDomVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Win16: {0}{1}", Request.Browser.Win16.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Win32: {0}{1}", Request.Browser.Win32.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "-------------------------------------------------------------------------------{0}", Environment.NewLine );
strb.AppendFormat ( "MachineName: {0}{1}", Environment.MachineName, Environment.NewLine );
strb.AppendFormat ( "OSVersion: {0}{1}", Environment.OSVersion, Environment.NewLine );
strb.AppendFormat ( "ProcessorCount: {0}{1}", Environment.ProcessorCount, Environment.NewLine );
strb.AppendFormat ( "UserName: {0}{1}", Environment.UserName, Environment.NewLine );
strb.AppendFormat ( "Version: {0}{1}", Environment.Version, Environment.NewLine );
strb.AppendFormat ( "UserInteractive: {0}{1}", Environment.UserInteractive, Environment.NewLine );
strb.AppendFormat ( "UserDomainName: {0}{1}", Environment.UserDomainName, Environment.NewLine );

编辑:在下面的解决方案不建议。试试这个代替: http://whichbrowser.net/

这一工作对我来说,但是,在寻找代码现在,我不知道如何。使用上述来代替:-/

<script type="text/javascript">
    // <![CDATA[
    var BrowserCheck = Class.create({
        initialize: function () {
            var userAgent = navigator.userAgent.toLowerCase();
            this.version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1];
            this.safari = /webkit/.test(userAgent) && !/chrome/.test(userAgent);
            this.opera = /opera/.test(userAgent);
            this.msie = /msie/.test(userAgent) && !/opera/.test(userAgent);
            this.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent);
            this.chrome = /chrome/.test(userAgent);
        }
    });    
    // ]]>
</script>

不要忘了,你需要初始化使用,因此把这个放在你的代码:

var UserBrowser = new BrowserCheck();

然后检查一浏览器的类型和版本是这样的:(例如Internet Explorer8)

if ((UserBrowser.msie == true) && (UserBrowser.version == 8))

等等。

希望它的工作对于你喜欢它对我们来说,但请记住,没有浏览器检测是防弹的!

对于互联网浏览器和样式表可以使用的语法如下:

<!--[if lte IE 6]><link href="/style.css" rel="stylesheet" type="text/css" /><![endif]-->

这个产品,即6或更早。你可以改变即版本,也有:

<!--[if eq IE 7]> = Equal too IE 7
<!--[if gt IE 6]> = Greater than IE 6

我不知道,如果这工作其他部分的页面,但适当放置在 <head> 标记。看看这个 更多信息

一般来说,当浏览器发出请求时,发送了一堆的信给你的信(时间、姓名日期、用户代理...).你应该试试看头的客户发送去的一个告诉你他们的浏览器(我认为这是"User-Agent:".

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top