Pregunta

¿Cuál es la mejor / más simple / forma más precisa para detectar el navegador de un usuario?

Facilidad de ampliación y de aplicación es un plus.

La menor de las tecnologías utilizadas, la mejor.

La solución puede estar de lado de servidor, cliente, o ambos.Los resultados, finalmente, acabar en el servidor, sin embargo.

La solución puede ser marco agnóstico.

La solución sólo será utilizada para los fines de información.

¿Fue útil?

Solución

En el servidor que está bastante limitado a la cadena UserAgent del navegador proporciona (que está plagado de problemas, tener una lectura sobre el UserAgent de la cadena de la historia).

En el cliente (es decir, en Javascript), usted tiene más opciones.Pero la mejor opción es no preocuparse por averiguar qué navegador es.Simplemente verifique para asegurarse de cualquier función que desea utilizar en realidad existe.

Por ejemplo, usted podría querer usar setCapture, que sólo MSIE proporciona:

if (element.setCapture) element.setCapture()

En lugar de trabajar en lo que el navegador y, a continuación, inferir sus capacidades, simplemente estamos viendo si se admite algo antes de usarlo - ¿quién sabe lo de los navegadores le apoyo en lo que en el futuro, es lo que realmente quiero tener que volver y actualizar los scripts si Safari decide apoyar setCapture?

Otros consejos

El JQuery Plugin Para El Navegador va a hacer del lado del cliente para usted.

¿Cuál es el jQuery Plugin para el Navegador?

JQuery Plugin es un complemento para jQuery que hace que sea fácil para identificar tu los navegadores de los visitantes.

¿Qué hacer?

Se le da un objeto en javascript que contiene toda la información sobre el navegador que se utiliza.También agrega CSS del navegador selectores, que significa que usted puede estilo de los elementos o escribir funciones específicas de los navegadores, versiones de navegador, diseños, diseño de versiones, e incluso sistemas operativos.Imagen de la jQuery Plugin para el Navegador en acción.

El plug-in hace $.browser disponibles, que se puede volver a presentar a su servidor a través de una llamada AJAX, si usted realmente necesita en el lado del servidor.

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

El plug-in sólo será tan eficaz como el de los navegadores se ha probado contra, sin embargo.El plugin antes mencionados tiene una lista de los navegadores reconocido en pruebas, pero siempre existe el riesgo de que un nuevo navegador vendrá escabullirse (Google Chrome..) que requieren una re-escritura de las reglas de reconocimiento.Dicho esto, este plug-in parece ser actualizado regularmente.

Cuando el uso de javascript: No utilice la detección del navegador

Escribir código que pone a prueba a sí mismo para determinados casos exhibidos por los navegadores, de lo contrario va a ser simplemente la escritura de código para una muy, muy pequeña de la población.Su mejor uso "typeof foo == 'undefined'" y el navegador trucos específicos de donde usted los necesita.

jQuery hace todo esto a través de su código base ( si os fijáis en el código verás que la aplicación de los comportamientos de los diferentes navegador tecnologies )

Su mejor en el largo plazo.

Desde que me acaba de publicar esto en un (ahora suprimido) y todavía en mi buffer, voy a publicar de nuevo.Nota:este es el lado del servidor PHP solución

Yo actualmente uso el siguiente código para este.No es casi de un agotador solución, pero debe ser fácil de implementar más navegadores.Yo no sabía acerca de user-agents.org (gracias PConroy), "uno de estos días" voy a bucle a través de él y ver si puedo actualizar y añadir a mi lista.

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

como Dan dijo:depende de la tecnología utilizada.

Por PHP servidor de lado la detección del navegador recomiendo Harald Esperanza de la detección del Navegador:

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

Publicada bajo la licencia GPL.

No utilice la detección del navegador:

  • La detección del navegador no es 100% fiable en el mejor de los tiempos, pero las cosas se ponen peor que esto:
  • Hay un montón de variantes de los navegadores (MSIE personalizaciones, etc)
  • Los navegadores pueden mentir acerca de su identidad (de la Ópera en realidad tiene esta característica incorporada)
  • Puertas de enlace de ocultar o camuflar el navegador de identidad
  • La personalización y la puerta de enlace de escritura de los proveedores de su propia basura en el USER_AGENT

Es mejor hacer la característica de detección de secuencias de comandos de cliente.Esperemos que sólo se necesita el navegador de detección para evitar un error en un determinado navegador y su versión.

Originalmente me hizo la pregunta porque quiero ser capaz de registrar los navegadores y las operaciones de los sistemas de uso de la gente de acceder a mi sitio.Sí, la cadena de agente de usuario no puede ser de confianza, y sí, usted no debería usar la detección del navegador para determinar cuál es el código para ejecutar en JS, pero, me gustaría tener lo más preciso posible de las estadísticas.

Hice lo siguiente.

Estoy usando una combinación de JavaScript y PHP para registrar las estadísticas.JavaScript para determinar qué navegador y sistema operativo (ya que este es probablemente la más precisa), y PHP para grabarlo:

El JavaScript que viene de Quirksmode, el PHP es bastante evidente.Yo uso el MooTools JS marco.

Agregue lo siguiente a la BrowserDetect secuencia de comandos:

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

Esto determina el navegador, la versión del navegador y el sistema operativo del navegador del usuario y la envía a la record_browser.php secuencia de comandos.El record_browser.php script solo agregar la información, junto con el PHP session_id y el actual user_id, si está presente.

Tabla 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`)
)

Código PHP:

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

Como se afirma por muchos, la detección del navegador puede ir muy mal...sin embargo, en los intereses de Código de Golf.

Esta es una forma muy rápida para detectar la IE.

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

Su prolija porque en realidad se recoge es decir, sin tropiezos en la Ópera.

Los puntos de bonificación si usted sabe por qué esto funciona en IE.;-)

Este es el código de C # que yo uso, espero que les sean útiles.

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

Editar:La solución más abajo no es recomendable.Pruebe esto en su lugar: http://whichbrowser.net/

Esta vez funcionó para mí, pero mirando el código ahora, no tengo idea de cómo.Utilizar la anterior vez :-/

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

No se olvide que usted necesita para inicializar a usarlo, así que pon esto en tu código:

var UserBrowser = new BrowserCheck();

Y, a continuación, comprobar para un tipo y versión de navegador así:(por ejemplo,Internet Explorer 8)

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

etc.

La esperanza se hace el trabajo para usted como para nosotros, pero recuerde que no hay ningún explorador de detección es a prueba de balas!

Para internet explorer y hojas de Estilo se puede utilizar la siguiente sintaxis:

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

Este applys para internet explorer 6 o una versión anterior.Usted puede cambiar la versión de IE y también tiene:

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

No estoy seguro de si esto funciona con otras partes de la página, pero funciona cuando se coloca dentro de la <head> de la etiqueta.Ver este ejemplo para obtener más información

Generalmente, cuando un navegador hace una petición, envía un montón de información (hora, el nombre de la fecha, el agente de usuario...).Usted debe tratar de buscar en los encabezados de que el cliente envía e ir a la que te cuenta su navegador (creo que es el "User-Agent:".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top