¿Hay una manera sólida de detectar si un usuario está utilizando un dispositivo móvil en jQuery? ¿Algo similar al atributo CSS @media? Me gustaría ejecutar un script diferente si el navegador está en un dispositivo portátil.
La $.browser
función jQuery no es lo que estoy buscando.
javascript
jquery
mobile
browser-detection
superUntitled
fuente
fuente
Respuestas:
Nota del editor: la detección de agentes de usuario no es una técnica recomendada para las aplicaciones web modernas. Vea los comentarios debajo de esta respuesta para confirmar este hecho. Se sugiere utilizar una de las otras respuestas mediante la detección de funciones y / o consultas de medios.
En lugar de usar jQuery, puede usar JavaScript simple para detectarlo:
O puede combinarlos para que sea más accesible a través de jQuery ...
Ahora
$.browser
regresará"device"
para todos los dispositivos anterioresNota:
$.browser
eliminado en jQuery v1.9.1 . Pero puede usar esto usando el código del complemento de migración jQueryUna versión más completa:
fuente
.This.Is.A.Bad.Idea.
Para mí lo pequeño es hermoso, así que estoy usando esta técnica:
En archivo CSS:
En el archivo jQuery / JavaScript:
Mi objetivo era tener mi sitio "apto para dispositivos móviles". Así que uso CSS Media Queries mostrar / ocultar elementos dependiendo del tamaño de la pantalla.
Por ejemplo, en mi versión móvil no quiero activar el Me gusta de Facebook, porque carga todas esas imágenes de perfil y otras cosas. Y eso no es bueno para los visitantes móviles. Entonces, además de ocultar el elemento contenedor, también hago esto dentro del bloque de código jQuery (arriba):
Puedes verlo en acción en http://lisboaautentica.com
Todavía estoy trabajando en la versión móvil, por lo que todavía no se ve como debería, al momento de escribir esto.
Actualización por dekin88
Hay una API de JavaScript incorporada para detectar medios. En lugar de usar la solución anterior, simplemente use lo siguiente:
Navegador compatible: http://caniuse.com/#feat=matchmedia
La ventaja de este método es que no solo es más simple y más corto, sino que puede apuntar condicionalmente a diferentes dispositivos como teléfonos inteligentes y tabletas por separado si es necesario sin tener que agregar ningún elemento ficticio en el DOM.
fuente
screen.width
propiedad es global. No es necesario agregar arbitrariamente un elemento al DOM e innecesariamente incorporar consultas de medios CSS. Además, si el navegador está en un escritorio y el usuario cambia el tamaño de la ventana,$is_mobile
no se actualizará.if( screen.width <= 480 ) { // is mobile }
width
valor del atributo IIRC. Por lo tanto, un iPhone retina tendrá unawidth
de640
y una altura de960
en vertical, y unawidth
de960
y una altura de640
en el paisaje.window.matchMedia
: developer.mozilla.org/en-US/docs/Web/API/Window.matchMediaSegún Mozilla - Detección del navegador utilizando el agente de usuario :
Me gusta esto:
Esto coincidirá con todos los agentes de usuario de navegador móvil comunes, incluidos Mozilla móvil, Safari, IE, Opera, Chrome, etc.
Actualización para Android
EricL recomienda realizar pruebas
Android
como agente de usuario también, ya que la cadena de agente de usuario de Chrome para tabletas no incluye "Mobi" (sin embargo, las versiones del teléfono sí lo hacen):fuente
/Mobi/i.test(navigator.userAgent)
embargo, prefiero , ya que test () devuelve un booleano./Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)
Una línea simple y efectiva:
Sin embargo, el código anterior no tiene en cuenta el caso de las computadoras portátiles con pantalla táctil. Por lo tanto, proporciono esta segunda versión, basada en la solución @Julian :
fuente
isMobile
función que proporcionó regresatrue
en mi dispositivo destop! (Google Chrome v44.0)Lo que está haciendo al querer detectar un dispositivo móvil es acercarse demasiado a un concepto IMO de "rastreo del navegador". Probablemente sería mucho mejor hacer alguna detección de características. Bibliotecas como http://www.modernizr.com/ pueden ayudar con eso.
Por ejemplo, ¿dónde está la línea entre móvil y no móvil? Se pone cada vez más borrosa cada día.
fuente
No es jQuery, pero encontré esto: http://detectmobilebrowser.com/
Proporciona scripts para detectar navegadores móviles en varios idiomas, uno de los cuales es JavaScript. Eso puede ayudarlo con lo que está buscando.
Sin embargo, dado que está utilizando jQuery, es posible que desee conocer la colección jQuery.support. Es una colección de propiedades para detectar las capacidades del navegador actual. La documentación está aquí: http://api.jquery.com/jQuery.support/
Como no sé qué es exactamente lo que está tratando de lograr, no sé cuál de estos será el más útil.
Dicho todo esto, creo que su mejor opción es redirigir o escribir un script diferente a la salida utilizando un lenguaje del lado del servidor (si esa es una opción). Como realmente no conoce las capacidades de un navegador móvil x, hacer la detección y la lógica de alteración en el lado del servidor sería el método más confiable. Por supuesto, todo eso es un punto discutible si no puede usar un lenguaje del lado del servidor :)
fuente
|android|ipad|playbook|silk
como se describe en la sección sobre (es por diseño)A veces se desea saber qué dispositivo de marca está utilizando un cliente para mostrar contenido específico de ese dispositivo, como un enlace a la tienda de iPhone o al mercado de Android. Modernizer es excelente, pero solo muestra las capacidades del navegador, como HTML5 o Flash.
Aquí está mi solución UserAgent en jQuery para mostrar una clase diferente para cada tipo de dispositivo:
Esta solución es de Graphics Maniacs http://graphicmaniacs.com/note/detecting-iphone-ipod-ipad-android-and-blackberry-browser-with-javascript-and-php/
fuente
Encontré una solución en: http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/ .
Y luego para verificar si se trata de un dispositivo móvil, puede probar usando:
fuente
Si por "móvil" te refieres a "pantalla pequeña", uso esto:
En iPhone terminarás con un ancho de pantalla.pantalla de 320. En Android terminarás con un ancho de ventana.outer de 480 (aunque eso puede depender del Android). Los iPads y las tabletas Android devolverán números como 768 para que puedan obtener la vista completa como desearían.
fuente
Si usa Modernizr , es muy fácil de usar
Modernizr.touch
como se mencionó anteriormente.Sin embargo, prefiero usar una combinación de
Modernizr.touch
pruebas de agente de usuario, solo para estar seguro.Si no usa Modernizr, simplemente puede reemplazar la
Modernizr.touch
función anterior con('ontouchstart' in document.documentElement)
También tenga en cuenta que probar el agente de usuario
iemobile
le dará una gama más amplia de dispositivos móviles de Microsoft detectados queWindows Phone
.También vea esta pregunta SO
fuente
TouchEvent.supported
.('ontouchstart' in window)
es una alternativa aModernizr.touch
, también, hacks.mozilla.org/2013/04/...~~V~~singular~~3rd|
lugar de muchas coincidencias. Tampoco necesitas eltoLowerCase()
porque tienes eli
modificador. Aquí:var isTouchDevice = Modernizr.touch || /iphone|ipod|ipad|android|iemobile|iphone|ipad|ipod|blackberry|bada/i.test(navigator.userAgent);
No puede confiar
navigator.userAgent
, no todos los dispositivos revelan su sistema operativo real. En mi HTC, por ejemplo, depende de la configuración (activar / desactivar la "versión móvil"). En http://my.clockodo.com , simplemente utilizamosscreen.width
para detectar dispositivos pequeños. Desafortunadamente, en algunas versiones de Android hay un error con screen.width. Puede combinarlo de esta manera con el UserAgent:fuente
Sé que esta pregunta tiene muchas respuestas, pero por lo que vi, nadie se acerca a la respuesta de la forma en que resolvería esto.
CSS usa el ancho (Consultas de medios) para determinar qué estilos se aplicaron al documento web basado en el ancho. ¿Por qué no usar el ancho en JavaScript?
Por ejemplo, en las consultas de medios de Bootstrap (Mobile First), existen 4 puntos de ajuste / interrupción:
Podemos usar esto para resolver también nuestro problema de JavaScript.
Primero crearemos una función que obtenga el tamaño de la ventana y devuelva un valor que nos permita ver qué tamaño de dispositivo está visualizando nuestra aplicación:
Ahora que tenemos configurada la función, podemos llamarla y almacenar el valor:
Tu pregunta fue
Ahora que tenemos la información del dispositivo, todo lo que queda es una declaración if:
Aquí hay un ejemplo en CodePen: http://codepen.io/jacob-king/pen/jWEeWG
fuente
Small Devices range from 768 to 991 pixels.
esto significa que debería serwindow.innerWidth < 992
(991 incluido) lo mismo para 1199, debería ser <1200 en su lugarEn una línea de javascript:
Si el agente de usuario contiene 'Mobi' (según MDN) y ontouchstart está disponible, entonces es probable que sea un dispositivo móvil.
fuente
/Mobi/.test(navigator.userAgent)
...match
no lo hizo por míMe sorprende que nadie haya señalado un buen sitio: http://detectmobilebrowsers.com/ Tiene un código listo en diferentes idiomas para la detección móvil (incluidos, entre otros):
Y si también necesita detectar las tabletas, simplemente consulte la sección Acerca de para obtener un parámetro RegEx adicional.
fuente
Si no está particularmente preocupado por las pantallas pequeñas, puede usar la detección de ancho / alto. De esta forma, si el ancho es inferior a un cierto tamaño, el sitio móvil se activa. Puede que no sea la forma perfecta, pero probablemente será la más fácil de detectar para múltiples dispositivos. Es posible que deba colocar uno específico para el iPhone 4 (gran resolución).
fuente
Para agregar una capa adicional de control, uso el almacenamiento HTML5 para detectar si está usando almacenamiento móvil o almacenamiento de escritorio. Si el navegador no admite almacenamiento, tengo una matriz de nombres de navegador móvil y comparo el agente de usuario con los navegadores de la matriz.
Es bastante simple Aquí está la función:
fuente
Si se encuentra que solo verificar
navigator.userAgent
no siempre es confiable. Se puede lograr una mayor confiabilidad al verificar tambiénnavigator.platform
. Una modificación simple a una respuesta anterior parece funcionar mejor:fuente
Te aconsejo que revises http://wurfl.io/
En pocas palabras, si importa un pequeño archivo JavaScript:
Te quedarás con un objeto JSON que se parece a:
(Eso supone que está utilizando un Nexus 7, por supuesto) y podrá hacer cosas como:
Esto es lo que estás buscando.
Descargo de responsabilidad: trabajo para la empresa que ofrece este servicio gratuito.
fuente
Echa un vistazo a esta publicación , proporciona un fragmento de código realmente agradable para saber qué hacer cuando se detectan dispositivos táctiles o qué hacer si se llama al evento touchstart:
fuente
'ontouchstart' in document.documentElement
es probablemente una mejor prueba de soporte táctil quewindow.Touch
. Aún mejor, use Modernizr.js ( modernizr.com ) porque he pensado mucho tratando de hacer una detección táctil correcta. Puede ver su código de detección táctil en modernizr.com/downloads/modernizr.js si ve el código de desarrollo y busca "táctil".Aquí hay una función que puede usar para obtener una respuesta verdadera / falsa sobre si está ejecutando en un navegador móvil. Sí, es un buscador de navegador, pero a veces eso es exactamente lo que necesita.
fuente
for
para esto! + Olvidaste crear un RegExp. Aquí hay uno más simple:return !!navigator.userAgent.match(new RegExp(agents.join('|'),'i'))
Todas las respuestas usan user-agent para detectar el navegador, pero la detección de dispositivos basada en user-agent no es una solución muy buena, mejor es detectar funciones como el dispositivo táctil (en el nuevo jQuery se eliminan
$.browser
y usan$.support
en su lugar).Para detectar dispositivos móviles, puede verificar los eventos táctiles:
Tomado de ¿Cuál es la mejor manera de detectar un dispositivo de 'pantalla táctil' usando JavaScript?
fuente
true
en computadoras de escritorio con pantallas táctiles. stucox.com/blog/you-cant-detect-a-touchscreenSugeriría usar el siguiente combo de cadenas para verificar si se usa el tipo de dispositivo.
Según la cadena de documentación de Mozilla,
Mobi
se recomienda. Pero, algunas de las tabletas antiguas no devuelven verdadero si soloMobi
se usa, por lo tanto, también deberíamos usarTablet
cadenas.Del mismo modo, por estar en el lado seguro
iPad
y lasiPhone
cadenas también podrían usarse para verificar el tipo de dispositivo.La mayoría de los nuevos dispositivos volverían solo
true
para laMobi
cadena.fuente
fuente
window.matchMedia("(pointer:coarse)").matches;
una respuesta diferente.Gran respuesta gracias. Pequeña mejora para admitir Windows phone y Zune:
fuente
if (navigator.userAgent.match(/Android|webOS|iPhone|iPad|etc/)){self.location = "top.htm"}
Utilizar este:
Entonces usa esto:
fuente
Función simple basada en http://detectmobilebrowser.com/
fuente
Si pasa a cualquier navegador y trata de obtener navigator.userAgent, obtendremos la información del navegador de la siguiente manera:
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 64.0.3282.186 Safari / 537.36
Lo mismo si haces en el móvil, recibirás seguimiento
Mozilla / 5.0 (Linux; Android 8.1.0; Pixel Build / OPP6.171019.012) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 61.0.3163.98 Mobile Safari / 537.36
Cada navegador móvil tendrá un agente de uso con una cadena que contenga "Móvil". Por lo tanto, estoy usando el fragmento anterior en mi código para verificar si el agente de usuario actual es web / móvil. Según el resultado, haré los cambios necesarios.
fuente
yo uso esto
fuente
¿Qué tal mobiledetect.net ?
Otras soluciones parecen demasiado básicas. Esta es una clase PHP ligera. Utiliza la cadena de User-Agent combinada con encabezados HTTP específicos para detectar el entorno móvil. También puede beneficiarse de Mobile Detect utilizando cualquiera de los complementos de terceros disponibles para: WordPress, Drupal, Joomla, Magento, etc.
fuente
No se debe confiar solo en las cadenas de agente de usuario. La solución a continuación funcionará en todas las situaciones.
y llama a esta función:
fuente