useragent perfect chrome android user-agent android-browser

android - perfect - user agents list 2018



Cómo detectar el navegador de Android (13)

"Navegador de Android" es el nombre de un navegador. Tal vez confuso, pero con una pregunta como esta, no debería ser. Es el navegador que viene con la gran mayoría de los dispositivos Android, y obviamente no está hablando de Chrome.

Según http://www.useragentstring.com/ esta es la lista completa de cadenas de Android Stock Browser. Actualmente no estoy seguro de si hay una mejor manera de seleccionarlos todos a la vez, ya que algunos se seguirán agregando y tampoco se enfocarán accidentalmente en Chrome en Android. Espero que alguien te dé una mejor respuesta, ya que yo mismo tengo curiosidad por saber cuál es la mejor manera de hacerlo.

Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9 Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.2.1; de-de; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla/5.0 (Linux; U; Android 2.1-update1; es-mx; SonyEricssonE10a Build/2.0.A.0.504) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 Mozilla/5.0 (Linux; U; Android 1.6; ar-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1

La navegación a http://whatsmyuseragent.com/ me muestra el navegador Android de mi Galaxy Nexus con 4.2.1 que tiene el agente de usuario

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24

No hay nada en este agente de usuario que me permita detectar de forma única que se trata de un navegador de Android de valores. La aplicación Chrome para Android al menos tiene android en la UA. ¿Hay alguna manera para que pueda detectar la aplicación de Android de valores?


A partir de ahora no hay un método verdadero para detectar esto. Actualmente estoy en Android 4.2.2 Stock Galaxy S4 AT&T y el navegador predeterminado ahora tiene Chrome en el agente de usuario (pero aún tiene los problemas de posición de TouchWiz corregidos)

Hasta que Samsung pueda a) arreglar touchwiz o b) eliminar Chrome de la cadena ua, no tenemos un método verdadero para detectar el navegador predeterminado de Android. No puedo decir si este es el caso de todos los teléfonos 4.2x +, pero este es un gran problema para el desarrollo de equipos que requieren consultas específicas de fabricación / navegador.

Soy parte de un equipo de desarrollo activo para aplicaciones web de extremo móvil y parece que TouchWiz causa muchos problemas para los diferentes aspectos que se desarrollan.

Otro problema es que hay compañías como Dolphin (excelente navegador, terrible AU) que en todos estos casos volvería a aparecer como el navegador predeterminado, ya que no proporciona una cadena "dolphin" y utiliza AppleWebKit534x

También con respecto a la U en la cadena de usuario-agente, no tuvo nada que ver con qué navegador. De hecho, esto tiene que ver con el método de cifrado que se usa para cada navegador (generalmente estándar según la ubicación)

"Los navegadores web creados en los Estados Unidos, como Netscape Navigator e Internet Explorer, usan las letras U, I y N para especificar la fuerza de cifrado en la cadena de agente de usuario. Hasta 1996, cuando el gobierno de los Estados Unidos rechazó el cifrado con claves más. de 40 bits que se exportarán, los proveedores enviaron varias versiones de navegador con diferentes potencias de cifrado. "U" significa "EE. UU." (para la versión con cifrado de 128 bits), "I" significa "Internacional": el navegador tiene 40- el cifrado de bits y se puede utilizar en cualquier parte del mundo, y "N" significa (de facto) "Ninguno" (sin cifrado). [10] Tras el levantamiento de las restricciones de exportación, la mayoría de los proveedores admitieron el cifrado de 256 bits ".

Fuente: http://en.wikipedia.org/wiki/User_agent#Encryption_strength_notations


Creo que estas buscando esto:

El navegador nativo de Android no se actualizó por encima de la versión 534.30, por lo que puede filtrar a la combinación de cadenas de UA de versión y Android (arriba podemos suponer que es un navegador Chrome)

Aquí está mi código JavaScript de muestra:

(Si necesita un estilo específico, agregaría una clase al cuerpo con el siguiente fragmento de código JS)

var defectAndroid = $window.navigator && $window.navigator.userAgent.indexOf(''534.30'') > 0 && $window.navigator.userAgent.toLowerCase().match(/android/); if (defectAndroid) { // sample code specific for your Android Stock browser }

(Algunos dispositivos Android que reportan ''android'' es por eso que necesitamos la conversación en minúsculas)



Necesito detectar Android Stock Browser para agregar algunos estilos personalizados porque no parece manejar correctamente el tamaño de la caja. El código que utilicé se basa en la respuesta de @Prakarangs que no funcionaba para mí. (No detectó el navegador de stock en un Galaxy Note 2)

var navU = navigator.userAgent; var isAndroidMobile = navU.indexOf(''Android'') > -1 && navU.indexOf(''Mozilla/5.0'') > -1 && navU.indexOf(''AppleWebKit'') > -1; var regExAppleWebKit = new RegExp(/AppleWebKit//([/d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); var isAndroidStockBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 535);

Tal vez esto sea útil para alguien más también.


No estás obteniendo android en la UA porque estás usando la vista de escritorio. Parece que no hay manera de identificar que este es un dispositivo móvil en ese modo. Una vez que cambie a la vista normal, verá la AU correcta.


Parece que la presencia de "Linux; U; Android" es un diferenciador constante para el navegador de valores. Quién sabe qué significa la "U", pero sospecho que no será confiable en el futuro. Es de esperar que el navegador desaparezca o comience a jugar como Chrome cuando cambien las cadenas. Algunas otras cadenas están abajo para la comparación

Android Chrome: "Mozilla / 5.0 (Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build / JZO54K) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 28.0.1500.94 Mobile Safari / 537.36"

Android Firefox: "Mozilla / 5.0 (Android; Móvil; rv: 23.0) Gecko / 23.0 Firefox / 23.0"

Android Opera: "Mozilla / 5.0 (Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build / JZO54K) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 28.0.1500.63 Mobile Safari / 537.36 OPR / 15.0.1162.61541"


Puede distinguir la diferencia entre el navegador de valores y el navegador Chrome buscando "Android" en el agente del usuario y verificando el número de versión de AppleWebKit / ###.

El navegador original de Android nunca superó los 534, y Chrome es de 537 o superior.

var maybeAndroid = navigator.userAgent.indexOf(''Android'') >= 0; var webkitVer = parseInt(/WebKit//([0-9]+)|$/.exec(navigator.appVersion)[1], 10); // also matches AppleWebKit var isAOSP = maybeAndroid && webkitVer <= 534 && navigator.vendor.indexOf(''Google'') == 0;

Esto es 99% confiable, y es muy útil para una aplicación en Android 4.x usando un WebView.

== detalles (si quieres profundizar!) ==

Edición 7: ''AudioNode'' in window es probablemente un ''AudioNode'' in window seguro para AOSP (o Chrome antiguo) en comparación con las versiones modernas de Chrome. Pruébalo aquí . window.AudioNode se introdujo como parte del soporte de WebAudio en Chrome 29 (y es poco probable que los fabricantes lo respalden). Nuestro teléfono 4.0.3 tiene Chrome 41, y ''AudioNode'' in window devuelve true para Chrome y false para AOSP. También puede oler otras características introducidas después de que AOSP haya finalizado el desarrollo; consulte este enlace para conocer otras características potenciales para oler. Elija una característica introducida antes de Chrome 42 porque los usuarios de Android 4.0 no pueden actualizar más allá de esa versión. Como es habitual en Android, seguramente habrá casos extraños, pero es probable que rastrear sea lo mejor que pueda obtener (especialmente si se combina con la comprobación de la versión de WebKit <537).

Edición 8:

== WebView en Android ==

Verificar <= 534 es una prueba perfecta cuando se utiliza una vista web dentro de una aplicación. La definición de compatibilidad para Android 4.3 (la última versión de Android que utiliza AOSP para WebView), dice que el agente de usuario de WebView DEBE ser: " Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 ".

La definición de compatibilidad para Android 4.4 (la primera versión de Android que usa Chromium para WebView), dice que el agente de usuario de WebView DEBE ser: " Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36 ".

Menos que Android 4.3 es muy similar a la definición 4.3 (siempre AOSP). Más de 4.4 es muy similar a la definición 4.4 (siempre cromo).

== AOSP en Android ==

Para el navegador en el dispositivo (no WebView), el agente de usuario no está prohibido por la Definición de compatibilidad. La versión real del navegador utilizada varía mucho según lo documented en el modo quirksmode y según lo documentado para la versión del navegador Samsung .

Edición 4: la solución recomendada es buscar Android sin Chrome en el agente de usuario según: here sin embargo, también puede ser necesario para garantizar la ausencia de / Windows Teléfono / porque Mobile-IE11-8.1-Update también tiene Android en la UA " Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 ". Edición 5: https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx muestra que IE12 en Windows Phone todavía tendrá Android en el agente de usuario.

Edición 3: Como comentaron los comentaristas, hay dispositivos con AOSP y> = 535, pero esta es la prueba más confiable que he encontrado (me encantaría ver algo mejor). Puede intentar asegurarse de que su código siga funcionando si falla el rastreo y aceptar que la fragmentación de Android significa que habrá dispositivos extraños que fallarán. Caveat Emptor. Edición 6: mirando algunos datos para un sitio específico, aproximadamente el 1% de lo que parecen ser inicios de sesión de AOSP tienen WebKit 537, por lo que aunque parece bastante confiable, definitivamente no es 100% confiable.

Edición 2: si está utilizando un WebView en una aplicación, esta detección es útil para Android> = 4.0 && Android <4.4.4, porque el componente WebView utiliza AOSP incluso si Chrome está instalado en el dispositivo.

Edición 1: dado que Android nativo ahora está "obsoleto", es razonable probarlo (y usar la bandera para solucionar las diferencias que no se pueden detectar mediante la detección de características).


Ref. De las respuestas de Nick y efusien. Esto me funciona con el sistema operativo Android 4.4.2.

// Native Android Browser var navU = navigator.userAgent; var isAndroidMobile = navU.indexOf(''Android'') > -1 && navU.indexOf(''Mozilla/5.0'') > -1 && navU.indexOf(''AppleWebKit'') > -1; var regExAppleWebKit = new RegExp(/AppleWebKit//([/d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); var regExChrome = new RegExp(/Chrome//([/d.]+)/); var resultChromeRegEx = regExChrome.exec(navU); var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1])); var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion >= 537) && (chromeVersion !== null && chromeVersion < 29);

porque ahora en Kitkat, el navegador nativo en Android usa WebKit 537.36 igual que Chrome cuando iniciamos sesión en UserAgent. Al marcar también chromeVersion <29, puedo obtener un navegador nativo en Android 4.4.2. (La versión de Chrome en mi Samsung S4 ahora es 40).

Consulte en este enlace la tabla de WebKit en diferentes versiones de Android: http://jimbergman.net/webkit-version-in-android-version/


Samsung Galaxy Note 3 con Android 4.4.2 tiene la siguiente cadena de UA para el navegador "Internet" ( no Chrome o cualquier otro navegador):

Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36

Samsung Galaxy S5 con Android 4.4.2 tiene la siguiente cadena de UA para el navegador ''Internet'' ( no Chrome o cualquier otro navegador):

Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG SM-G900H Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36

No solo podemos verificar AppleWebKit <537 más.

Actualmente estoy comprobando si AppleWebKit <537 O Chrome <29 usando el método del usuario efusien.


Si JavaScript en lugar del rastreo de UA del lado del servidor es una opción para usted, pruebe (!!window.chrome) && (!window.chrome.app) . No puedo garantizar, sin embargo, que este sea "seguro", funcionará "para siempre" o algo así. Considera que es un truco malvado para ser usado solo para propósitos de prueba.

Explicación: los navegadores Chrome (o Chromium?) (Bueno, los que probé aquí, que eran acciones de Chrome y Android en Cyanogenmod 10) tienen un objeto llamado window.chrome , pero en el navegador de Android, el que probé al menos, Este objeto no tiene la propiedad de la app .

Edición: Parece que las versiones anteriores de Chrome darán falsos positivos con esta solución. A su vez, las versiones más recientes del navegador de valores probablemente den "falsos negativos".


La respuesta de efusien (11 de noviembre de 2013 a las 20:18) funciona para mí , aunque no se ha declarado una variable, y se usó una coma en un lugar en lugar de un punto y coma, lo que resulta en un gran fracaso para cualquiera que busque una copia / pegar respuesta .

Lo siguiente es lo que funcionó para mí, incluido un ejemplo práctico que utiliza una condición "si es el navegador nativo":

var navU = navigator.userAgent; // Android Mobile var isAndroidMobile = navU.indexOf(''Android'') > -1 && navU.indexOf(''Mozilla/5.0'') > -1 && navU.indexOf(''AppleWebKit'') > -1; // Android Browser (not Chrome) var regExAppleWebKit = new RegExp(/AppleWebKit//([/d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); var isAndroidBrowser = isAndroidMobile && appleWebKitVersion !== null && appleWebKitVersion < 537; $(window).load(function() { if (isAndroidBrowser) { // It''s Android''s native browser (and not Chrome), so do something } });


var navU = navigator.userAgent; // Android Mobile var isAndroidMobile = navU.indexOf(''Android'') > -1 && navU.indexOf(''Mozilla/5.0'') > -1 && navU.indexOf(''AppleWebKit'') > -1; // Apple webkit var regExAppleWebKit = new RegExp(/AppleWebKit//([/d.]+)/); var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU); var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1])); // Chrome var regExChrome = new RegExp(/Chrome//([/d.]+)/); var resultChromeRegEx = regExChrome.exec(navU); var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1])); // Native Android Browser var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 537) || (chromeVersion !== null && chromeVersion < 37);