Frage

Was ist die beste / einfachste / genaueste Methode, um den Browser eines Benutzers zu erkennen?

Einfache Erweiterbarkeit und Implementierung ist ein Plus.

Die weniger Technologien verwendet, desto besser.

Die Lösung kann Serverseite, Client-Seite oder beides sein. Die Ergebnisse sollen schließlich auf dem Server am Ende, though.

Die Lösung kann Rahmen Agnostiker sein.

Die Lösung wird nur für Berichtszwecke verwendet werden.

War es hilfreich?

Lösung

Auf dem Server sind Sie ziemlich viel auf den Useragenten-String begrenzt der Browser bietet (die mit Problemen behaftet ist, haben eine Lese über die Useragent-String Geschichte ).

Auf dem Client (dh in Javascript), haben Sie mehr Möglichkeiten. Aber die beste Möglichkeit ist, nicht wirklich Sorgen über die Arbeit heraus, welchen Browser es ist. überprüfen, um einfach stellen Sie sicher, was Funktion, die Sie verwenden möchten, tatsächlich vorhanden ist.

Zum Beispiel möchten Sie vielleicht SetCapture verwenden, die nur MSIE sieht vor:

if (element.setCapture) element.setCapture()

Anstatt ausarbeitet, was der Browser ist, und dann seine Fähigkeiten Folgern, wir sehen einfach, wenn es etwas unterstützt, bevor es zu benutzen - wer weiß, was Browser, was in Zukunft unterstützen wird, möchten Sie müssen wirklich gehen zurück und Ihre Skripte aktualisieren, wenn Safari SetCapture zu unterstützen entscheidet?

Andere Tipps

Die JQuery Browser Plugin es Client-Seite wird dies für Sie.

  

Was ist der jQuery Browser Plugin?

     

Das jQuery Browser Plugin ist ein Addon für jQuery, die es einfach macht eindeutig zu Ihren Besuchern Browser zu identifizieren.

     

Was ist zu tun?

     

Es gibt Ihnen ein Objekt in Javascript, die alle Informationen über den verwendeten Browser enthält. Es fügt auch CSS Browser-Selektoren, was bedeutet, dass Sie Elemente oder Schreibfunktionen für bestimmte Browser, Browser-Versionen, Layouts, Layoutvarianten und sogar Betriebssysteme stylen können. Bild des jQuery Browser Plugin in Aktion.

Die Plug-in macht $.browser zur Verfügung, die Sie auf Ihren Server über einen AJAX-Aufruf erneut vorlegen, wenn Sie es wirklich serverseitige müssen.

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

Das Plug-in wird nur so effektiv sein wie die Browser es gegen getestet hat sich jedoch. Das Plugin aufgeführt hat oben eine Liste der Browser in seinen Tests erkannt , aber es gibt immer das Risiko dass ein neuer Browser heimlich aus kommen ( Google Chrome .. ), die eine Re-write des erfordern Erkennungsregeln. Das heißt, dieses Plug-in erscheint regelmäßig aktualisiert werden.

Wenn Sie Javascript verwenden: Verwenden Sie Browser-Erkennung nicht

Schreiben Sie Code, sich von den Browsern zeigten für bestimmte Fälle prüft, sonst werden Sie einfach Code für eine sehr, sehr kleine Population schreiben. Es ist besser "typeof foo == 'undefined'" und Browser-spezifische Tricks zu verwenden, wo Sie sie benötigen.

jQuery tut dies über seine gesamte Code-Basis (wenn Sie auf den Code schauen Sie werden sehen, es Verhaltensweisen für verschiedene Browser tecnologies Implementierung)

Es ist besser, auf lange Sicht.

Da ich gerade gepostet in einer (inzwischen gelöscht Frage) und es ist immer noch in meinem Paste-Puffer, werde ich umbuchen gerade. Hinweis: Dies ist eine serverseitige PHP-Lösung

Ich verwende derzeit den folgenden Code für diese. Es ist nicht annähernd eine anstrengende Lösung, aber es sollte einfach mehr Browser zu implementieren. Ich wusste nicht, über user-agents.org (dank PConroy), "eines Tages" I werde Schleife durch sie und sehen, ob ich auf meiner Liste aktualisieren und hinzufügen können.

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

als Dan sagte: es von der verwendeten Technologie abhängt.

Für PHP-Server-Seite Browser-Erkennung empfehlen i Harald Hopes Browser-Erkennung:

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

Veröffentlicht unter der GPL.

Verwenden Sie Browser-Erkennung nicht:

  • Browser-Erkennung ist nicht 100% zuverlässig zu den besten Zeiten, aber es kommt noch schlimmer als das:
  • Es gibt viele Varianten von Browsern (MSIE Anpassungen usw.)
  • Browser können über ihre Identität liegen (Opera hat tatsächlich diese Funktion eingebaut)
  • Gateways verstecken oder die Browser-Identität verschleiern
  • Anpassung und Gateway-Anbieter schreiben ihren eigenen Müll in dem USER_AGENT

Es ist besser, Feature-Erkennung in Client-Skript zu tun. Sie hoffentlich nur Browser-Erkennung benötigen um einen Fehler in einem bestimmten Browser und Version zu arbeiten.

Ich fragte ursprünglich die Frage, weil ich den Browser und Betriebssysteme der Leute meine Website zugreifen nutzen können, aufnehmen möge. Ja, der String-User-Agent kann nicht vertraut werden, und ja, sollten Sie nicht Browser-Erkennung verwenden, um zu bestimmen, welcher Code in JS zu laufen, aber ich so genau wie möglich Statistiken haben möge.

Ich habe folgende.

Ich verwende eine Kombination von JavaScript und PHP die Statistiken aufzeichnen. JavaScript, um zu bestimmen, welchen Browser und Betriebssystem (wie das ist, wahrscheinlich die genaueste) und PHP es aufzunehmen:

Der JavaScript kommt von Quirksmode , die PHP ist ziemlich selbstverständlich. Ich benutze die MooTools JS-Framework.

Fügen Sie Folgendes zum BrowserDetect Skript:

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

Dies bestimmt den Browser, Browser-Version und OS des Browsers des Benutzers und sendet sie an den record_browser.php Skript. Das record_browser.php Skript nur hinzufügen, ist die Information, zusammen mit der PHP session_id und der aktuellen user_id, falls vorhanden.

MySQL Tabelle:

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

Wie von vielen erwähnt, Browser-Erkennung sehr schief gehen kann ... aber im Interesse des Code Golf.

Dies ist eine sehr schnelle Art und Weise IE zu erkennen.

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

Es ist ziemlich ordentlich eigentlich, weil es IE nimmt, ohne auf Opera stolpern.

Bonuspunkte, wenn Sie , warum das funktioniert im Internet Explorer. ; -)

Dies ist der C # -Code ich, ich hoffe, wird hilfreich sein.

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

Bearbeiten : Die Lösung unten ist nicht zu empfehlen. Versuchen Sie stattdessen: http://whichbrowser.net/

Das einmal für mich gearbeitet, aber jetzt Blick auf den Code, ich habe keine Ahnung, wie. Verwenden Sie die oben statt: - /

<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>

Vergessen Sie nicht, dass Sie es, es zu benutzen initialisieren müssen, so setzen diese in Ihrem Code:

var UserBrowser = new BrowserCheck();

Und dann prüfen, ob ein Browser-Typ und Version wie folgt: (zum Beispiel Internet Explorer 8)

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

etc.

Hoffe, es macht den Job für Sie, es hat für uns gefallen, aber denken Sie daran, dass kein Browser-Erkennung ist kugelsicher!

Für das Internet Explorer und Stylesheets Sie die folgende Syntax verwenden:

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

Diese applys auf IE 6 oder früher. Sie können die IE-Version ändern und auch haben:

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

Im nicht sicher, ob dies mit anderen Teilen der Seite funktioniert, aber funktioniert, wenn innerhalb des <head> Tages platziert. Sehen Sie diese Beispiel für weitere Informationen

Im Allgemeinen, wenn ein Browser eine Anforderung macht, sendet er eine Reihe von Informationen an Sie (Uhrzeit, Name Datum, User-Agent ...). Sie sollten den Client gesendet an den Header zu suchen versuchen und zu dem man gehen, dass Sie ihren Browser erzählt (ich glaube, es ist „User-Agent:“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top