Qual é a melhor maneira de detectar um dispositivo móvel em jQuery?

Existe uma maneira sólida de detectar se um usuário está ou não usando um dispositivo móvel em jQuery? Algo semelhante ao atributo CSS @media? Gostaria de executar um script diferente se o navegador estiver em um dispositivo portátil.

a função jQuery $.browser não é o que estou à procura.

Author: superUntitled, 2010-08-18

20 answers

Também pode usar o programa do lado do servidor e definir variáveis de javascript a partir dele.

Exemplo em php

Telecarregamento http://code.google.com/p/php-mobile-detect/ e depois definir variáveis de javascript.

<script>
//set defaults
var device_type = 'desktop';
</script>

<?php
require_once( 'Mobile_Detect.php');
$detect = new Mobile_Detect();
?>

<script>
device_type="<?php echo ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' : 'mobile') : 'desktop'); ?>";
alert( device_type);
</script>
 2
Author: Pawel Dubiel, 2012-07-18 15:39:50

Tentei algumas das maneiras {[[6]} e depois decidi preencher uma lista manualmente e fazer uma simples verificação JS. E no final o usuário tem que confirmar. Porque alguns cheques deram falso positivo ou negativo.

var isMobile = false;
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Opera Mobile|Kindle|Windows Phone|PSP|AvantGo|Atomic Web Browser|Blazer|Chrome Mobile|Dolphin|Dolfin|Doris|GO Browser|Jasmine|MicroB|Mobile Firefox|Mobile Safari|Mobile Silk|Motorola Internet Browser|NetFront|NineSky|Nokia Web Browser|Obigo|Openwave Mobile Browser|Palm Pre web browser|Polaris|PS Vita browser|Puffin|QQbrowser|SEMC Browser|Skyfire|Tear|TeaShark|UC Browser|uZard Web|wOSBrowser|Yandex.Browser mobile/i.test(navigator.userAgent) && confirm('Are you on a mobile device?')) isMobile = true;

Agora, se quiser usar o jQuery para definir o CSS, pode fazer o seguinte:

$(document).ready(function() {
  if (isMobile) $('link[type="text/css"]').attr('href', '/mobile.css');
});

Uma vez que as fronteiras entre dispositivos móveis e fixos se tornam fluentes e os navegadores móveis já são poderosos, verificar a largura e a confirmação do utilizador será provavelmente o melhor para a futuro (assumindo que a largura em alguns casos ainda será importante). Porque os toques já são convertidos em mouse-ups e downs.

E quanto à mobilidade, sugiro que pensem na ideia do Yoav Barnea.:
if(typeof window.orientation !== 'undefined'){...}
 2
Author: Albert, 2017-05-23 10:31:37
function isDeviceMobile(){
 var isMobile = {
  Android: function() {
      return navigator.userAgent.match(/Android/i) && navigator.userAgent.match(/mobile|Mobile/i);
  },
  BlackBerry: function() {
      return navigator.userAgent.match(/BlackBerry/i)|| navigator.userAgent.match(/BB10; Touch/);
  },
  iOS: function() {
      return navigator.userAgent.match(/iPhone|iPod/i);
  },
  Opera: function() {
      return navigator.userAgent.match(/Opera Mini/i);
  },
  Windows: function() {
      return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/webOS/i) ;
  },
  any: function() {
      return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
  }
};      
 return isMobile.any()
}
 2
Author: mohamed-ibrahim, 2013-10-27 09:48:54

Eu uso este

if(navigator.userAgent.search("mobile")>0 ){
         do something here
}
 2
Author: Yene Mulatu, 2014-03-07 00:54:02
Este é o meu código que estou a usar nos meus projectos.
function isMobile() {
 try {
    if(/Android|webOS|iPhone|iPad|iPod|pocket|psp|kindle|avantgo|blazer|midori|Tablet|Palm|maemo|plucker|phone|BlackBerry|symbian|IEMobile|mobile|ZuneWP7|Windows Phone|Opera Mini/i.test(navigator.userAgent)) {
     return true;
    };
    return false;
 } catch(e){ console.log("Error in isMobile"); return false; }
}
 2
Author: Kousha, 2018-03-30 21:13:52

Check-out http://detectmobilebrowsers.com/ que lhe fornece um programa para detectar dispositivos móveis em várias línguas, incluindo

JavaScript, jQuery, PHP, JSP, Perl, Python, ASP, C#, ColdFusion e muitos mais

 2
Author: Akshay Khale, 2018-03-30 21:14:11

Você pode usar a consulta de mídia para ser capaz de lidar com isso facilmente.

isMobile = function(){
    var isMobile = window.matchMedia("only screen and (max-width: 760px)");
    return isMobile.matches ? true : false
}
 2
Author: vin, 2018-06-26 02:52:03
var device = {
  detect: function(key) {
    if(this['_'+key] === undefined) {
      this['_'+key] = navigator.userAgent.match(new RegExp(key, 'i'));
    }
    return this['_'+key];
  },
  iDevice: function() {
    return this.detect('iPhone') || this.detect('iPod');
  },
  android: function() {
    return this.detect('Android');
  },
  webOS: function() {
    return this.detect('webOS');
  },
  mobile: function() {
    return this.iDevice() || this.android() || this.webOS();
  }
};
Já usei algo assim no passado. Isto é semelhante a uma resposta anterior, mas é tecnicamente mais performante na medida em que cache o resultado da partida, especialmente se a detecção está sendo usada em uma animação, evento de pergaminho, ou algo parecido.
 1
Author: Fran, 2011-11-04 15:10:22
Esta parece ser uma solução abrangente e moderna.

Https://github.com/matthewhudson/device.js

Ele detecta várias plataformas, smartphone vs. tablets, e orientação. Ele também adiciona classes para a tag de corpo assim a detecção ocorre apenas uma vez e você pode ler o dispositivo que você está com uma série simples de funções de jquery hasClass. Olha para isto... Não tenho nada a ver com a pessoa que a escreveu.]
 1
Author: Paolo Mioni, 2014-05-05 10:43:39

Http://www.w3schools.com/jsref/prop_nav_useragent.asp

Filtro pelo nome da plataforma.

Ex:

x = $( window ).width();

platform = navigator.platform;

alert(platform);

if ( (platform != Ipad) || (x < 768) )  {


} 

^^

 1
Author: João Marcos Santos Teixeira, 2016-07-11 16:00:49

Se por um dispositivo móvel você entender um sensível ao toque, então você pode determiná-lo verificando a existência de manipuladores do toque:

let deviceType = (('ontouchstart' in window)
                 || (navigator.maxTouchPoints > 0)
                 || (navigator.msMaxTouchPoints > 0)
                 ) ? 'touchable' : 'desktop';
O JQuery não é necessário para isso.
 1
Author: Daniel Kucal, 2018-02-15 15:26:46

Também eu recomendo usar o pequeno JavaScript library Bowser, yes no R. é baseado no navigator.userAgent e bastante bem testado para todos os navegadores, incluindo iPhone, Android etc.

Https://github.com/ded/bowser

Pode usar simplesmente dizer:

if (bowser.msie && bowser.version <= 6) {
  alert('Hello China');
} else if (bowser.firefox){
  alert('Hello Foxy');
} else if (bowser.chrome){
  alert('Hello Silicon Valley');
} else if (bowser.safari){
  alert('Hello Apple Fan');
} else if(bowser.iphone || bowser.android){
  alert('Hello mobile');
}
 1
Author: arikan, 2018-03-30 21:14:27

Adicionar:

Em algumas versões de iOS 9.x , Safari não apresenta o "iPhone" em navigator.userAgent, mas mostra-o em navigator.platform.

var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);
    if(!isMobile){
        isMobile=/iPhone|iPad|iPod/i.test(navigator.platform);
    }
 1
Author: NikitOn, 2018-03-30 21:15:03

Conheço esta velha pergunta e há muita resposta, mas acho que esta função é simples e vai ajudar a detectar todos os dispositivos móveis, Tablet e navegador de computador que funciona como um encanto.

function Device_Type() 
{
    var Return_Device; 
    if(/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android|iemobile|w3c|acs\-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd\-|dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg\-c|lg\-d|lg\-g|lge\-|maui|maxo|midp|mits|mmef|mobi|mot\-|moto|mwbp|nec\-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch\-|sec\-|send|seri|sgh\-|shar|sie\-|siem|smal|smar|sony|sph\-|symb|t\-mo|teli|tim\-|tosh|tsm\-|upg1|upsi|vk\-v|voda|wap\-|wapa|wapi|wapp|wapr|webc|winw|winw|xda|xda\-) /i.test(navigator.userAgent))
    {
        if(/(tablet|ipad|playbook)|(android(?!.*(mobi|opera mini)))/i.test(navigator.userAgent)) 
        {
            Return_Device = 'Tablet';
        }
        else
        {
            Return_Device = 'Mobile';
        }
    }
    else if(/(tablet|ipad|playbook)|(android(?!.*(mobi|opera mini)))/i.test(navigator.userAgent)) 
    {
        Return_Device = 'Tablet';
    }
    else
    {
        Return_Device = 'Desktop';
    }

    return Return_Device;
}
 1
Author: Mohamad Hamouday, 2018-03-30 21:15:22

Aqui está mais uma sugestão implementada com JavaScript puro (es6)

const detectDeviceType = () =>
    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
        ? 'Mobile'
        : 'Desktop';

detectDeviceType();
 1
Author: Gor Davtyan, 2018-03-30 21:16:01
Estes são todos os vaules que conheço. Por favor, ajude a udating o array se você sabe de quaisquer outros valores.
function ismobile(){
   if(/android|webos|iphone|ipad|ipod|blackberry|opera mini|Windows Phone|iemobile|WPDesktop|XBLWP7/i.test(navigator.userAgent.toLowerCase())) {
       return true;
   }
   else
    return false;
}
 0
Author: Kareem, 2016-06-05 17:52:17

Dependendo do que você quer detectar móvel (o que significa que esta sugestão não vai atender às necessidades de todos), você pode ser capaz de conseguir uma distinção olhando para a diferença de milisegundo onmouseenter-to-onclick, como eu descrevi em esta resposta.

 0
Author: WoodrowShigeru, 2018-09-23 11:16:01
Faço isto pelas minhas aplicações. net. Na minha página partilhada, acrescento isto.
@{
    var isMobileDevice = HttpContext.Current.Request.Browser.IsMobileDevice;
}

<html lang="en" class="@((isMobileDevice)?"ismobiledevice":"")">

Então para verificar em qualquer página do seu site (jQuery):

<script>
var isMobile = $('html').hasClass('ismobiledevice');
</script>
 -1
Author: Mickey, 2018-03-30 21:16:45

Utilize este

if( screen.width <= 480 ) { 
    // is mobile 
}
 -4
Author: Ankit Kumar, 2017-08-02 11:03:55

Se quiser testar o agente do utilizador, a forma correcta é testar o agente do utilizador, ou seja, testar {[[0]}.

Se o user for falso isto, não lhes interessa. Se você test.isUnix() Você não deve posteriormente ter que se preocupar se o sistema é Unix.

Como um usuário mudando userAgent também é bom, mas você não espera que os sites rendam corretamente se você fizer.

Se você deseja fornecer suporte para navegadores Microsoft você deve garantir que os primeiros caracteres do conteúdo inclui e testa todas as páginas que escreveres.

Conclusão:.. Código sempre de acordo com os padrões. Em seguida, hackeá-lo até que ele funciona na versão atual do IE & não espere que ele pareça bom. É o que o GitHub faz, e eles receberam 100 milhões de dólares.
 -6
Author: teknopaul, 2018-03-30 21:17:20