online name browser browser-detection

name - javascript detect browser version



Detección del navegador (12)

Al usar javascript: no use detección de navegador

Escriba el código que se prueba a sí mismo para los casos presentados por los navegadores, de lo contrario, simplemente estará escribiendo código para una población muy pequeña. Es mejor usar "typeof foo == ''undefined''" y trucos específicos del navegador donde los necesites.

jQuery hace esto en toda su base de código (si miras el código lo verás implementando comportamientos para diferentes tecnologías de navegador)

Es mejor a la larga.

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

La facilidad de extensibilidad e implementación es un plus.

Cuantas menos tecnologías se usen, mejor.

La solución puede ser del lado del servidor, del lado del cliente o de ambos. Sin embargo, los resultados finalmente deberían terminar en el servidor.

La solución puede ser marco agnóstico.

La solución solo se usará para informes.


Como acabo de publicar esto en una (pregunta ahora eliminada) y todavía está en mi buffer de pegado, voy a volver a publicar. Nota: esta es una solución de PHP del lado del servidor

Actualmente uso el siguiente código para esto. No es una solución casi extenuante, pero debería ser fácil implementar más navegadores. No sabía acerca de user-agents.org (gracias PConroy), "uno de estos días" Lo revisaré y veré si puedo actualizar y agregar 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; } }


El complemento del navegador JQuery lo hará por usted.

¿Qué es el plugin jQuery Browser?

JQuery Browser Plugin es un complemento para jQuery que facilita la identificación única de los navegadores de sus visitantes.

¿Qué hace?

Le da un objeto en javascript que contiene toda la información sobre el navegador que se está utilizando. También agrega selectores de navegador CSS, lo que significa que puede aplicar estilos a elementos o escribir funciones para navegadores específicos, versiones de navegadores, diseños, versiones de diseño e incluso sistemas operativos. Imagen del plugin jQuery Browser en acción.

El complemento hace $.browser disponible, que puede volver a enviar a su servidor a través de una llamada AJAX, si realmente lo necesita en el servidor.

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

Sin embargo, el plug-in solo será tan efectivo como los navegadores contra los que se haya probado. El complemento mencionado anteriormente tiene una lista de navegadores reconocidos en sus pruebas , pero siempre existe el riesgo de que un nuevo navegador salga furtivamente ( Google Chrome ... ) que requerirá una nueva escritura de las reglas de reconocimiento. Dicho esto, este complemento parece actualizarse regularmente.


En el servidor, está prácticamente limitado a la cadena UserAgent que proporciona el navegador (que está plagada de problemas, lea sobre el historial de la cadena UserAgent ).

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

Por ejemplo, es posible que desee usar setCapture, que solo proporciona MSIE:

if (element.setCapture) element.setCapture()

En lugar de averiguar qué es el navegador y luego inferir sus capacidades, simplemente estamos viendo si es compatible con algo antes de usarlo. ¿Quién sabe qué navegadores admitirán lo que en el futuro, realmente desea tener que volver y actualizar? sus scripts si Safari decide soportar setCapture?


No use la detección del navegador:

  • La detección del navegador no es 100% confiable en el mejor de los casos, pero las cosas empeoran:
  • Hay muchas variantes de navegadores (personalizaciones de MSIE, etc.)
  • Los navegadores pueden mentir sobre su identidad (en realidad, Opera tiene esta característica incorporada)
  • Los portales ocultan u oscurecen la identidad del navegador
  • Los vendedores de personalización y puerta de enlace escriben su propia basura en el USER_AGENT

Es mejor hacer detección de características en script de cliente. Es de esperar que solo necesites detección de navegador para solucionar un error en un navegador y una versión específicos.


Para Internet Explorer y hojas de estilo, puede usar la siguiente sintaxis:

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

Esto se aplica a IE 6 o anterior. Puede cambiar la versión de IE y también tener:

<!--[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 etiqueta <head> . Ver este ejemplo para más información



En general, cuando un navegador realiza una solicitud, le envía una gran cantidad de información (hora, nombre, fecha, usuario-agente ...). Debería tratar de ver los encabezados que el cliente envió e ir al que le dice su navegador (creo que es "User-Agent:").


Originalmente, hice la pregunta porque quiero poder registrar los navegadores y los sistemas de operaciones que las personas usan para acceder a mi sitio. Sí, no se puede confiar en la cadena de agente de usuario, y sí, no se debe usar la detección de navegador para determinar qué código ejecutar en JS, pero me gustaría tener las estadísticas más precisas posibles.

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 es probablemente el más preciso) y PHP para registrarlo:

El JavaScript proviene de Quirksmode , el PHP es bastante evidente. Yo uso el framework MooTools JS.

Agregue lo siguiente al script 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(); } });

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

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


Según lo declarado por muchos, la detección del navegador puede ir muy mal ... sin embargo, en interés de Code Golf.

Esta es una forma muy rápida de detectar IE.

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

Es bastante limpio en realidad porque selecciona IE sin tropezar con Opera.

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


Este es el código de C # que uso, espero que sea útil.

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 a continuación no es recomendable. Pruebe esto en su lugar: http://whichbrowser.net/

Esto una vez funcionó para mí, pero mirando el código ahora, no tengo idea de cómo. Use lo anterior en su lugar: - /

<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 olvides que debes inicializarlo para usarlo, así que ponlo en tu código:

var UserBrowser = new BrowserCheck();

Y luego busque un tipo de navegador y una versión como esta: (por ejemplo, Internet Explorer 8)

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

etc.

Espero que haga el trabajo por usted como lo ha hecho para nosotros, pero recuerde que ¡ninguna detección de navegador es a prueba de balas!