Qual è il modo migliore per rilevare un dispositivo mobile?


1652

Esiste un modo solido per rilevare se un utente utilizza o meno un dispositivo mobile in jQuery? Qualcosa di simile all'attributo CSS @media? Vorrei eseguire uno script diverso se il browser si trova su un dispositivo portatile.

La $.browserfunzione jQuery non è ciò che sto cercando.


7
Fornisci un URL mobile specifico per i dispositivi mobili. Ecco come la maggior parte dei siti principali gestisce i dispositivi mobili. Vedi m.google.com .
meagar

6
jQuery non lo fa e non può fare tutto. Fornisce attraversamento e manipolazione DOM tra browser, semplice animazione e ajax tra i browser e crea un framework scheletro su cui i plugin possono basarsi. Si prega di essere consapevoli delle limitazioni di jQuery prima di richiedere specificamente una soluzione jQuery.
Yi Jiang,

78
Gli user agent sono obiettivi in ​​costante movimento, tutti coloro che leggono questo post dovrebbero essere molto attenti allo sniffing degli user agent
Rob

46
Che cos'è un dispositivo "mobile"? È un dispositivo che supporta il tocco (inclusi Chrome Pixel e laptop Windows 8 con mouse)? È un dispositivo con un piccolo schermo (che dire degli iPad retina)? È un dispositivo con una CPU lenta? O un dispositivo con una connessione Internet lenta? A seconda di ciò che si desidera fare, la risposta a questa domanda può variare. Mirare alla risoluzione dello schermo o al tocco è facile. Se vuoi pubblicare contenuti più piccoli o JS meno intensivi per alcuni dispositivi, non c'è nessun proiettile d'argento. Esegui il test per window.navigator.connection e ricollega l'utente (cattivo, cattivo, sconsiderato) annusando l'agente. I miei 2 centesimi.
David Gilbertson,

3
@Cole "Cole9" Johnson Il mio punto esattamente. "Mobile" sembra essere usato come termine generico per touch, CPU lenta, rete lenta e schermo piccolo. Ma nessuna di queste sono ipotesi perfette. Credo che considerare questi individualmente comporterà un prodotto migliore rispetto alla progettazione di alcuni vaghi concetti di "mobile". Quindi mi faccio questa domanda all'OP.
David Gilbertson,

Risposte:


2028

Nota dell'editore: il rilevamento dell'agente utente non è una tecnica consigliata per le app Web moderne. Vedi i commenti sotto questa risposta per la conferma di questo fatto. Si consiglia di utilizzare una delle altre risposte utilizzando il rilevamento delle funzionalità e / o le query multimediali.


Invece di usare jQuery puoi usare JavaScript semplice per rilevarlo:

if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
 // some code..
}

Oppure puoi combinarli entrambi per renderlo più accessibile tramite jQuery ...

$.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));

Ora $.browsertornerà "device"per tutti i dispositivi sopra

Nota: $.browserrimosso su jQuery v1.9.1 . Ma puoi usarlo usando il codice del plugin di migrazione jQuery


Una versione più approfondita:

var isMobile = false; //initiate as false
// device detection
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) 
    || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) { 
    isMobile = true;
}

438
Lo sniffing dell'agente utente è una tecnica di rilevamento molto delicata, le stringhe dell'agente utente sono un obiettivo in costante movimento, non dovrebbero essere attendibili da sole. Le persone che hanno votato a favore di questo post dovrebbero prendere in considerazione ulteriori ricerche.
Rob,

65
Uno dei problemi con lo sniffing per dispositivi specifici fuori dall'agente utente è che devi ricordarti di aggiornare il rilevamento quando escono nuovi dispositivi. Questa non è una soluzione ideale.
ICodeForCoffee

11
Il browser Dolphin su Android non invia nessuna di queste stringhe!
feeela,

88
Se il tuo utente è abbastanza furbo o gli sviluppatori abbastanza stupidi da cambiare la stringa dell'agente utente, chi se ne frega di loro ...
mattdlockyer

58
Quindi, come considereresti mobile una TV Android con il mouse? Quanto è mobile un PC Windows in grado di funzionare in modalità doppia (con tastiera o come touchscreen)? Se lo hai fatto prima che l'iPad fosse inventato, dovevi aggiungerlo in seguito a tutti i tuoi siti. Prossimi SO in uscita: Ubuntu Mobile, FirefoxOS, Tizen ....This.Is.A.Bad.Idea.
FrancescoMM,

535

Per me piccolo è bello, quindi sto usando questa tecnica:

Nel file CSS:

/* Smartphones ----------- */
@media only screen and (max-width: 760px) {
  #some-element { display: none; }
}

Nel file jQuery / JavaScript:

$( document ).ready(function() {      
    var is_mobile = false;

    if( $('#some-element').css('display')=='none') {
        is_mobile = true;       
    }

    // now I can use is_mobile to run javascript conditionally

    if (is_mobile == true) {
        //Conditional script here
    }
 });

Il mio obiettivo era di avere il mio sito "ottimizzato per dispositivi mobili". Quindi uso CSS Media Query per mostrare / nascondere gli elementi a seconda delle dimensioni dello schermo.

Ad esempio, nella mia versione mobile non voglio attivare la Like Box di Facebook, perché carica tutte quelle immagini e cose del profilo. E questo non va bene per i visitatori mobili. Quindi, oltre a nascondere l'elemento contenitore, lo faccio anche all'interno del blocco di codice jQuery (sopra):

if(!is_mobile) {
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/pt_PT/all.js#xfbml=1&appId=210731252294735";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
}

Puoi vederlo in azione su http://lisboaautentica.com

Sto ancora lavorando sulla versione mobile, quindi non sembra ancora come dovrebbe, al momento di scrivere questo.

Aggiornamento di dekin88

Esiste un'API JavaScript integrata per il rilevamento dei media. Invece di utilizzare la soluzione sopra è sufficiente utilizzare quanto segue:

$(function() {      
    let isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;

    if (isMobile) {
        //Conditional script here
    }
 });

Supporti browser: http://caniuse.com/#feat=matchmedia

Il vantaggio di questo metodo è che non è solo più semplice e più breve, ma è possibile targetizzare condizionatamente diversi dispositivi come smartphone e tablet separatamente, se necessario, senza dover aggiungere elementi fittizi nel DOM.


8
Non hai bisogno di # qualche elemento ATTUALMENTE NEL DOM perché questo funzioni?
Rimer,

68
-1 La screen.widthproprietà è globale. Non è necessario aggiungere arbitrariamente un elemento al DOM e portare inutilmente query sui media CSS. Inoltre, se il browser si trova su un desktop e l'utente ridimensiona la finestra, $is_mobilenon verrà aggiornato.
Merv

98
Perché no:if( screen.width <= 480 ) { // is mobile }
andrewrjones,

23
@andrewrjones I dispositivi Retina raddoppiano il widthvalore dell'attributo IIRC. Pertanto, un iPhone retina avrà un widthdi 640e un'altezza di 960in verticale, ed una widthdi 960e un'altezza di 640nel paesaggio.
Cole Johnson,

66
Hai appena reinventato window.matchMedia: developer.mozilla.org/en-US/docs/Web/API/Window.matchMedia
Paul Irish

236

Secondo Mozilla - Rilevamento del browser tramite l'agente utente :

In breve, consigliamo di cercare la stringa "Mobi" in qualsiasi punto dell'agente utente per rilevare un dispositivo mobile.

Come questo:

if (/Mobi/.test(navigator.userAgent)) {
    // mobile!
}

Ciò corrisponderà a tutti i comuni agenti utente del browser mobile, inclusi Mozilla mobile, Safari, IE, Opera, Chrome, ecc.

Aggiornamento per Android

EricL consiglia inoltre di eseguire il test Androidcome agente utente, poiché la stringa dell'agente utente di Chrome per tablet non include "Mobi" (tuttavia le versioni del telefono):

if (/Mobi|Android/i.test(navigator.userAgent)) {
    // mobile!
}

11
Grazie per la risposta! Preferisco /Mobi/i.test(navigator.userAgent)però, come test () restituisce un valore booleano.
Arminrosu,

5
Paradossalmente FireFox Mobile su un Samsung Galaxy Note 8 non restituisce Mobi e il test restituirà false.
Eirinn,

13
L'articolo citato menziona: se il dispositivo è abbastanza grande da non essere contrassegnato con "Mobi", dovresti servire il tuo sito desktop (che, come best practice, dovrebbe comunque supportare l'input tattile, poiché vengono visualizzati più computer desktop con touchscreen).
QuasarDonkey,

2
È molto meglio delle altre soluzioni suggerite, dovrebbe essere la risposta accettata imo
RNobel

9
Derp. Grazie. Non ho potuto modificare il mio post precedente. Eccolo di nuovo:/Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)
EricL

90

Una linea semplice ed efficace:

function isMobile() { return ('ontouchstart' in document.documentElement); }

Tuttavia, il codice sopra riportato non tiene conto del caso dei laptop con touchscreen. Pertanto, fornisco questa seconda versione, basata sulla soluzione @Julian :

function isMobile() {
  try{ document.createEvent("TouchEvent"); return true; }
  catch(e){ return false; }
}

29
Che dire dei laptop Windows con touchscreen?
Chris Cinelli,

10
La seconda isMobilefunzione che hai fornito ritorna truesul mio dispositivo destop !! (Google Chrome v44.0)
Luca,

12
Questo è più un metodo isTouchSupported che non è in realtà un rilevamento mobile.
Barkermn01,

3
Non tutti i telefoni cellulari dispongono di touchscreen.
Andrew,

@LukeP Stai rinfrescando quando passi dall'emulazione mobile al desktop?
Christian4423,

81

Quello che stai facendo desiderando rilevare un dispositivo mobile è avvicinarti un po 'troppo a un concetto di "fiuto del browser" IMO. Probabilmente sarebbe molto meglio fare un po 'di rilevamento delle caratteristiche. Biblioteche come http://www.modernizr.com/ possono aiutarti in questo.

Ad esempio, dov'è la linea tra mobile e non mobile? Diventa sempre più sfocato ogni giorno.


3
tuttavia, un utente potrebbe voler utilizzare "jquery mobile" per quei dispositivi, indipendentemente dalle funzionalità supportate.
Sirber,

9
Ad esempio, il mio problema con "mobile" "non mobile" è la mia funzionalità di rollover, ho JS impostato per disattivare le funzionalità, ho solo bisogno di rilevare
Sam Sussman,

4
Tuttavia, se desideri offrire un'app scaricabile specifica per dispositivo, può essere utile.
Bastes,

3
Dipende dalla situazione, sto cercando qualcosa che mi dirà se l'utente è su un dispositivo mobile, in modo da poter disabilitare alcune animazioni basate su JavaScript. Lo sniffing UA sarebbe molto più appropriato rispetto al tentativo di "rilevare" le funzionalità di prestazione JavaScript del browser dell'utente.
Rick Suggerisce il

9
Mobile vs non mobile è una grande distinzione, solo l'uso del "rilevamento di funzionalità" è stupido quando si tenta di soddisfare le interazioni / ui per un'esperienza mobile / desktop. Personalmente, vorrei che ci fosse un modo semplice (e affidabile) per ottenere il sistema operativo in cui è in esecuzione il browser corrente
nbsp

66

Non è jQuery, ma ho trovato questo: http://detectmobilebrowser.com/

Fornisce script per rilevare i browser mobili in diverse lingue, uno dei quali è JavaScript. Questo potrebbe aiutarti con quello che stai cercando.

Tuttavia, poiché si utilizza jQuery, è possibile che si desideri conoscere la raccolta jQuery.support. È una raccolta di proprietà per rilevare le funzionalità del browser corrente. La documentazione è qui: http://api.jquery.com/jQuery.support/

Dal momento che non so che cosa esattamente stai cercando di realizzare, non so quale di questi sarà il più utile.

Detto questo, penso che la soluzione migliore sia quella di reindirizzare o scrivere uno script diverso sull'output utilizzando un linguaggio lato server (se questa è un'opzione). Dato che non conosci veramente le capacità di un browser mobile x, fare il rilevamento e la logica di alterazione sul lato server sarebbe il metodo più affidabile. Naturalmente, tutto ciò è un punto controverso se non è possibile utilizzare una lingua lato server :)


6
che non supporta iPad. Per supportare iPad, cerca ip (hone | od) e "| ad" - ad es. Ip (hone | od | ad)
Jayson Ragasa,

3
Ho appena provato il javascript da detectmobilebrowser.com/ e NON funziona per iPad.
Milche Patern,

3
@MilchePatern è perché lo script è difettoso, usa iPad invece di ipad, quindi funziona, ho avuto il problema sul mio Samsung Tab, ho dovuto usare Android iso android :)
Coen Damen,

13
Esiste una versione jQuery lì, e funziona perfettamente, ma per il rilevamento tablet è necessario aggiungere |android|ipad|playbook|silkcome descritto nella sezione about (è di progettazione)
cprcrack

3
Bene sì, un tablet non è un cellulare. Il sito si chiama browser mobile dectect .
Felix Eve,

47

A volte si desidera sapere quale dispositivo di marca viene utilizzato da un client al fine di mostrare contenuti specifici per quel dispositivo, come un collegamento all'iPhone store o al mercato Android. Modernizer è eccezionale, ma mostra solo le funzionalità del tuo browser, come HTML5 o Flash.

Ecco la mia soluzione UserAgent in jQuery per visualizzare una classe diversa per ogni tipo di dispositivo:

/*** sniff the UA of the client and show hidden div's for that device ***/
var customizeForDevice = function(){
    var ua = navigator.userAgent;
    var checker = {
      iphone: ua.match(/(iPhone|iPod|iPad)/),
      blackberry: ua.match(/BlackBerry/),
      android: ua.match(/Android/)
    };
    if (checker.android){
        $('.android-only').show();
    }
    else if (checker.iphone){
        $('.idevice-only').show();
    }
    else if (checker.blackberry){
        $('.berry-only').show();
    }
    else {
        $('.unknown-device').show();
    }
}

Questa soluzione è tratta da Graphics Maniacs http://graphicmaniacs.com/note/detecting-iphone-ipod-ipad-android-and-blackberry-browser-with-javascript-and-php/


Funziona benissimo. Avevo bisogno di disabilitare una funzione jQuery che funziona con lo scorrimento quando si utilizza un telefono iPad o Android e poiché i vari dispositivi hanno larghezze dello schermo diverse, questa è stata una soluzione semplice. Grazie mille.
Eric Allen,

L'unico problema con l'utilizzo del test di Android è che dire dell'angolo che utilizza l'agente utente Android
MayorMonty

Bella risposta che dimostra che non dobbiamo essere fondamentalisti del rilevamento delle caratteristiche.
Fernando,

44

Trovata una soluzione in: http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/ .

var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};

E quindi per verificare se si tratta di un cellulare, è possibile testare utilizzando:

if(isMobile.any()) {
   //some code...
}

Una soluzione basata sull'agente utente funziona bene quando si può essere certi che la sottostringa sia direttamente correlata al tipo di dispositivo. cioè iPad = iPad. Tuttavia ora ci sono così tanti diversi tipi di dispositivi (oltre 25.000) che l'approccio non è abbastanza preciso per la maggior parte degli scopi aziendali. Ho fondato il progetto open source 51Degrees.com per fornire un'alternativa affidabile e solida. Funzionerà in JavaScript e anche sul lato server. Tutta la documentazione è qui ... 51degrees.com/support/documentation
James Rosewell

Ho usato anche sopra, e funzionava bene per me, ma ora non funziona per Android 5.1 e versioni successive, c'è qualcosa di cambiato in Android 5.1 e versioni successive?
Imran Qamer,

if (isMobile.Android ()) {document.getElementById ("myAnchor"). setAttribute ("href", " google.com" ); }
Amranur Rahman,

25

Se per "cellulare" intendi "piccolo schermo", utilizzo questo:

var windowWidth = window.screen.width < window.outerWidth ?
                  window.screen.width : window.outerWidth;
var mobile = windowWidth < 500;

Su iPhone finirai con un window.screen.width di 320. Su Android finirai con un window.outerLarghezza di 480 (anche se questo può dipendere da Android). iPad e tablet Android restituiranno numeri come 768 in modo da ottenere la visualizzazione completa come desideri.


1
perché 'window.screen.width' non è abbastanza? Sembra che stai prendendo la più piccola di 'window.screen.width' o 'window.outerWidth'. Perché ti preoccupi di 'outerWidth'? Grazie in anticipo per la risposta!
user1330974

16

Se usi Modernizr , è molto facile da usare Modernizr.touchcome menzionato in precedenza.

Tuttavia, preferisco utilizzare una combinazione di Modernizr.touchtest utente e utente, solo per sicurezza.

var deviceAgent = navigator.userAgent.toLowerCase();

var isTouchDevice = Modernizr.touch || 
(deviceAgent.match(/(iphone|ipod|ipad)/) ||
deviceAgent.match(/(android)/)  || 
deviceAgent.match(/(iemobile)/) || 
deviceAgent.match(/iphone/i) || 
deviceAgent.match(/ipad/i) || 
deviceAgent.match(/ipod/i) || 
deviceAgent.match(/blackberry/i) || 
deviceAgent.match(/bada/i));

if (isTouchDevice) {
        //Do something touchy
    } else {
        //Can't touch this
    }

Se non usi Modernizr, puoi semplicemente sostituire la Modernizr.touchfunzione sopra con('ontouchstart' in document.documentElement)

Si noti inoltre che il test dell'agente utente iemobileoffre una gamma più ampia di dispositivi mobili Microsoft rilevati rispetto a Windows Phone.

Vedi anche questa domanda SO


E lo stesso a Dart: TouchEvent.supported.
Kai Sellgren,

('ontouchstart' in window)è un'alternativa a Modernizr.touch, anche, hacks.mozilla.org/2013/04/...~~V~~singular~~3rd
JVE999

Penso che modernizr sia un'ottima soluzione!
Bobby Russell,

Dovresti davvero usare RegEx |invece di molte partite. Inoltre non è necessario il toLowerCase()perché si dispone del imodificatore. Qui: var isTouchDevice = Modernizr.touch || /iphone|ipod|ipad|android|iemobile|iphone|ipad|ipod|blackberry|bada/i.test(navigator.userAgent);
Oriadam,

14

Non puoi fare affidamento navigator.userAgent, non tutti i dispositivi rivelano il suo vero sistema operativo. Sul mio HTC, ad esempio, dipende dalle impostazioni ("utilizzo della versione mobile" on / off). Su http://my.clockodo.com , abbiamo semplicemente utilizzato screen.widthper rilevare piccoli dispositivi. Sfortunatamente, in alcune versioni di Android c'è un bug con screen.width. È possibile combinare in questo modo con userAgent:

if(screen.width < 500 ||
 navigator.userAgent.match(/Android/i) ||
 navigator.userAgent.match(/webOS/i) ||
 navigator.userAgent.match(/iPhone/i) ||
 navigator.userAgent.match(/iPod/i)) {
alert("This is a mobile device");
}

8
Molti cellulari hanno una larghezza> 1000, specialmente in modalità orizzontale
oriadam,

14

So che questa domanda ha molte risposte, ma da quello che ho visto nessuno si avvicina alla risposta nel modo in cui lo risolverei.

CSS utilizza la larghezza (Media Query) per determinare quali stili applicati al documento Web si basano sulla larghezza. Perché non usare la larghezza in JavaScript?

Ad esempio nelle media query di Bootstrap (Mobile First), esistono 4 punti di snap / break:

  • I dispositivi extra piccoli sono 768 pixel e meno.
  • I dispositivi di piccole dimensioni vanno da 768 a 991 pixel.
  • I dispositivi medi vanno da 992 a 1199 pixel.
  • I dispositivi di grandi dimensioni hanno una risoluzione di 1200 pixel e oltre.

Possiamo usarlo per risolvere anche il nostro problema JavaScript.

Per prima cosa creeremo una funzione che ottiene la dimensione della finestra e restituisce un valore che ci consente di vedere quali dimensioni del dispositivo sta visualizzando la nostra applicazione:

var getBrowserWidth = function(){
    if(window.innerWidth < 768){
        // Extra Small Device
        return "xs";
    } else if(window.innerWidth < 991){
        // Small Device
        return "sm"
    } else if(window.innerWidth < 1199){
        // Medium Device
        return "md"
    } else {
        // Large Device
        return "lg"
    }
};

Ora che abbiamo impostato la funzione, possiamo chiamarla e memorizzare il valore:

var device = getBrowserWidth();

La tua domanda era

Vorrei eseguire uno script diverso se il browser si trova su un dispositivo portatile.

Ora che abbiamo le informazioni sul dispositivo, tutto ciò che rimane è un'istruzione if:

if(device === "xs"){
  // Enter your script for handheld devices here 
}

Ecco un esempio su CodePen: http://codepen.io/jacob-king/pen/jWEeWG


Questo ha funzionato meglio per me. Dal momento che stavo usando bootstrap per alcune pagine forward mobile, questa tecnica ha funzionato bene per reindirizzare automaticamente da un forward non mobile (non bootstrap) a una pagina bootstrap. Suggerimento: ho riscontrato un piccolo problema negli strumenti IE11 F12: avevo attivato l'emulazione in F12 Dev Tools per un dispositivo mobile e avevo problemi nel rilevare le dimensioni della finestra. L'avevo ridimensionato sotto il punto di interruzione xs ma lo stava rilevando come md. Non appena ho spento l'emulazione di un telefono e ho aggiornato la pagina, ha rilevato correttamente le dimensioni e nel mio codice reindirizzo a una pagina di bootstrap.
Jeff Mergler,

Cioè stavo cercando da un po '. Grazie!
Sviluppatore

2
@JacobKing hai detto che Small Devices range from 768 to 991 pixels.significa che dovrebbe essere window.innerWidth < 992(991 è incluso) la stessa cosa per 1199 dovrebbe essere <1200 invece
medBouzid

13

In una riga di JavaScript:

var isMobile = ('ontouchstart' in document.documentElement && navigator.userAgent.match(/Mobi/));

Se l'agente utente contiene "Mobi" (come da MDN) e intouchstart è disponibile, è probabile che sia un dispositivo mobile.


1
ho dovuto /Mobi/.test(navigator.userAgent)... matchnon farlo per me
BananaAcid

12

Sono sorpreso che nessuno abbia indicato un bel sito: http://detectmobilebrowsers.com/ Ha un codice pronto in diverse lingue per il rilevamento mobile (incluso ma non limitato a):

  • Apache
  • ASP
  • C #
  • IIS
  • JavaScript
  • Nginx
  • PHP
  • Perl
  • Pitone
  • Rails

E se è necessario rilevare anche i tablet, basta controllare la sezione Informazioni per ulteriori parametri RegEx.

Tablet Android, iPad, Kindle Fire e PlayBooks non vengono rilevati dal design. Per aggiungere supporto per tablet, aggiungi |android|ipad|playbook|silkal primo regex.


Per me funzionava, puoi essere più specifico su quale codice usi e dove sembra essere un problema?
Maksim Luzik,

quella pagina è risposta, di tutte le altre risposte sono copia incolla di quella pagina
Rubén Ruíz

11

Se non sei particolarmente preoccupato per i display di piccole dimensioni, puoi utilizzare il rilevamento di larghezza / altezza. In questo modo, se la larghezza è inferiore a una determinata dimensione, viene lanciato il sito mobile. Potrebbe non essere il modo perfetto, ma sarà probabilmente il più facile da rilevare per più dispositivi. Potrebbe essere necessario inserirne uno specifico per iPhone 4 (risoluzione elevata).


9

Per aggiungere un ulteriore livello di controllo, utilizzo l'archiviazione HTML5 per rilevare se utilizza l'archiviazione mobile o l'archiviazione desktop. Se il browser non supporta l'archiviazione, ho una matrice di nomi di browser mobili e confronto l'agente utente con i browser della matrice.

È abbastanza semplice Ecco la funzione:

// Used to detect whether the users browser is an mobile browser
function isMobile() {
    ///<summary>Detecting whether the browser is a mobile browser or desktop browser</summary>
    ///<returns>A boolean value indicating whether the browser is a mobile browser or not</returns>

    if (sessionStorage.desktop) // desktop storage 
        return false;
    else if (localStorage.mobile) // mobile storage
        return true;

    // alternative
    mobile = ['iphone','ipad','android','blackberry','nokia','opera mini','windows mobile','windows phone','iemobile','tablet','mobi']; 
    var ua=navigator.userAgent.toLowerCase();
    for (var i in mobile) if (ua.indexOf(mobile[i]) > -1) return true;

    // nothing found.. assume desktop
    return false;
}

1
la tua ipotesi basata su localStorage è piuttosto interessante, puoi fornire una gamma di dispositivi o browser supportati che corrispondano correttamente al tuo script? Sono interessato a trovare una soluzione per questa domanda che ho posto e cercare di rilevare i browser per tablet mobili può davvero essere una soluzione interessante
Gruber,

9

Se trovato che solo il controllo navigator.userAgentnon è sempre affidabile. Una maggiore affidabilità può essere ottenuta anche controllando navigator.platform. Una semplice modifica a una risposta precedente sembra funzionare meglio:

if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||
   (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) {
    // some code...
}

5
Non è consentito autorizzare arbitrariamente il downvoting di una risposta senza lasciare un commento. Nel migliore dei casi, è scortese.
Marco

8

Vi consiglio di dare un'occhiata a http://wurfl.io/

In poche parole, se importi un piccolo file JavaScript:

<script type='text/javascript' src="//wurfl.io/wurfl.js"></script>

Ti verrà lasciato un oggetto JSON simile a:

{
 "complete_device_name":"Google Nexus 7",
 "is_mobile":true,
 "form_factor":"Tablet"
}

(Supponendo che tu stia utilizzando un Nexus 7, ovviamente) e sarai in grado di fare cose come:

if(WURFL.is_mobile) {
    //dostuff();
}

Questo e ciò che stai cercando.

Disclaimer: lavoro per l'azienda che offre questo servizio gratuito.


Wurfl non è riuscito a rilevare nexus7 e iPad mini!
Jacob,

Qualcosa non va nel Nexus 7. Sei sicuro di non avere il Nexus che falsifica la stringa UA nelle impostazioni? per quanto riguarda l'iPad mini, sì, è molto difficile distinguerlo dall'altro iPad, ma era ancora riconosciuto come un iPad, giusto? Sei tu che hai annullato il voto al mio post?
Luca Passani,

No, l'ipad mini è stato rilevato come dispositivo desktop
Jacob,

7

Dai un'occhiata a questo post , offre uno snippet di codice davvero interessante su cosa fare quando vengono rilevati i dispositivi touch o cosa fare se viene chiamato l'evento touchstart:

$(function(){
  if(window.Touch) {
    touch_detect.auto_detected();
  } else {
    document.ontouchstart = touch_detect.surface;
  }
}); // End loaded jQuery
var touch_detect = {
  auto_detected: function(event){
    /* add everything you want to do onLoad here (eg. activating hover controls) */
    alert('this was auto detected');
    activateTouchArea();
  },
  surface: function(event){
    /* add everything you want to do ontouchstart here (eg. drag & drop) - you can fire this in both places */
    alert('this was detected by touching');
    activateTouchArea();
  }
}; // touch_detect
function activateTouchArea(){
  /* make sure our screen doesn't scroll when we move the "touchable area" */
  var element = document.getElementById('element_id');
  element.addEventListener("touchstart", touchStart, false);
}
function touchStart(event) {
  /* modularize preventing the default behavior so we can use it again */
  event.preventDefault();
}

'ontouchstart' in document.documentElementè probabilmente un test migliore per il supporto touch rispetto a window.Touch. Ancora meglio, usa Modernizr.js ( modernizr.com ) perché ha speso molti pensieri nel tentativo di ottenere il rilevamento del tocco giusto. Puoi vedere il loro codice di rilevamento touch in modernizr.com/downloads/modernizr.js se visualizzi il codice di sviluppo e cerchi "touch".
robocat,

3
Il rilevamento del tocco mi ha messo nei guai, perché alcuni nuovi laptop Windows 8 rilevano come touchscreen in Chrome, portando a risultati strani.
JWarner,

6

Ecco una funzione che puoi utilizzare per ottenere una risposta vera / falsa sul fatto che tu sia in esecuzione su un browser mobile. Sì, annusa il browser, ma a volte è esattamente ciò di cui hai bisogno.

function is_mobile() {
    var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry'];
    for(i in agents) {
        if(navigator.userAgent.match('/'+agents[i]+'/i')) {
            return true;
        }
    }
    return false;
}

1
Ciò non riuscirà a rilevare molti browser mobili, in particolare Chrome per dispositivi mobili. Probabilmente fallirà anche su alcuni dei: Opera Mobile, Firefox mobile, Opera Mini, vari popolari browser mobili cinesi, ecc.
Ecc

Non è necessario forper questo! + Hai dimenticato di creare un RegExp. Eccone una più semplice:return !!navigator.userAgent.match(new RegExp(agents.join('|'),'i'))
Oriadam,

6

Tutte le risposte utilizzano user-agent per rilevare il browser, ma il rilevamento dei dispositivi basato su user-agent non è un'ottima soluzione, è meglio rilevare funzionalità come il dispositivo touch (nel nuovo jQuery rimuovono $.browsere usano$.support invece).

Per rilevare dispositivi mobili è possibile verificare la presenza di eventi touch:

function is_touch_device() {
  return 'ontouchstart' in window // works on most browsers 
      || 'onmsgesturechange' in window; // works on ie10
}

Preso da Qual è il modo migliore per rilevare un dispositivo "touch screen" utilizzando JavaScript?


4
Sfortunatamente, questo non è affidabile e comunque ritorna truesu PC desktop con touchscreen. stucox.com/blog/you-cant-detect-a-touchscreen
JustAMartin

1
Non dimenticare i laptop con touchscreen e le esperienze complete del browser. :-)
Mike Kormendy,

questo potrebbe non essere il modo migliore per verificare se si tratta di un dispositivo mobile o meno, ma come afferma il nome della funzione è perfetto per verificare la presenza di dispositivi abilitati al tocco. +1 da parte mia ;-)
Kathara,

6

Vorrei suggerire di utilizzare la seguente combinazione di stringhe, per verificare se si utilizza il tipo di dispositivo.

Come da Mozilla documentazione stringa Mobiè raccomandato. Ma alcuni dei vecchi tablet non tornano veri se Mobiusati solo , quindi dovremmo usareTablet anche la stringa.

Allo stesso modo, per essere al sicuro iPadeiPhone stringhe potrebbero anche essere usate per controllare il tipo di dispositivo.

La maggior parte dei nuovi dispositivi ritornerebbe solo trueper la Mobistringa.

if (/Mobi|Tablet|iPad|iPhone/.test(navigator.userAgent)) {
    // do something
}

3
Ho dovuto aggiungere "android" per lavorare sui tablet. Dovrò modificare, ma mi piace l'approccio.
Andy,

6

È possibile utilizzare media query per essere in grado di gestirlo facilmente.

isMobile = function(){
    var isMobile = window.matchMedia("only screen and (max-width: 760px)");
    return isMobile.matches ? true : false
}

Mi piace questo approccio, ho sollevato window.matchMedia("(pointer:coarse)").matches;da una risposta diversa.
Jason Lydon,

6

Ottima risposta grazie. Piccolo miglioramento per supportare Windows Phone e Zune:

if (navigator.userAgent.match(/Android/i) ||
  navigator.userAgent.match(/webOS/i) ||
  navigator.userAgent.match(/iPhone/i) ||
  navigator.userAgent.match(/iPad/i) ||
  navigator.userAgent.match(/iPod/i) ||
  navigator.userAgent.match(/BlackBerry/) ||
  navigator.userAgent.match(/Windows Phone/i) ||
  navigator.userAgent.match(/ZuneWP7/i)
) {
  // some code
  self.location = "top.htm";
}

Direi che questa è la soluzione più semplice (forse non la migliore) se stai cercando di gestire eventi hover / trascinamento per dispositivi mobili. Uso qualcosa del genere per creare un booleano "isMobile" che viene quindi verificato per ogni evento hover / mouseover. Ecco i miei due centesimi, comunque. Aggiungere più librerie js o codice che richiede l'interazione dell'utente non ha molto senso per me; correggimi se sbaglio però.
MeanMatt

3
Dato che stai usando espressioni regolari, in realtà le usi:if (navigator.userAgent.match(/Android|webOS|iPhone|iPad|etc/)){self.location = "top.htm"}
foobaremade

5

Usa questo:

/**  * jQuery.browser.mobile (http://detectmobilebrowser.com/)  * jQuery.browser.mobile will be true if the browser is a mobile device  **/ (function(a){jQuery.browser.mobile=/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

Quindi usa questo:

if(jQuery.browser.mobile)
{
   console.log('You are using a mobile device!');
}
else
{
   console.log('You are not using a mobile device!');
}

5

Semplice funzione basata su http://detectmobilebrowser.com/

function isMobile() {
    var a = navigator.userAgent||navigator.vendor||window.opera;
    return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4));
}

5
<script>
  function checkIsMobile(){
      if(navigator.userAgent.indexOf("Mobile") > 0){
        return true;
      }else{
        return false;
      }
   }
</script>

Se vai su qualsiasi browser e se provi a ottenere navigator.userAgent, otterremo le informazioni del browser come segue

Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit / 537.36 (KHTML, come Gecko) Chrome / 64.0.3282.186 Safari / 537.36

La stessa cosa se lo fai in mobile seguirai

Mozilla / 5.0 (Linux; Android 8.1.0; Pixel Build / OPP6.171019.012) AppleWebKit / 537.36 (KHTML, come Gecko) Chrome / 61.0.3163.98 Mobile Safari / 537.36

Ogni browser mobile avrà useragent con stringa contenente "Mobile" Quindi sto usando lo snippet sopra nel mio codice per verificare se l'attuale user agent è web / mobile. In base al risultato, eseguirò le modifiche necessarie.


4

Io lo uso

if(navigator.userAgent.search("mobile")>0 ){
         do something here
}

4

Che ne dici di mobiledetect.net ?

Altre soluzioni sembrano troppo semplici. Questa è una classe PHP leggera. Utilizza la stringa User-Agent combinata con intestazioni HTTP specifiche per rilevare l'ambiente mobile. Puoi anche beneficiare di Mobile Detect utilizzando uno qualsiasi dei plug-in di terze parti disponibili per: WordPress, Drupal, Joomla, Magento, ecc.


Perché la domanda posta per jQuery?
Craicerjack,

3

Le stringhe dell'agente utente non devono essere considerate attendibili da sole. La soluzione seguente funzionerà in tutte le situazioni.

function isMobile(a) {
  return (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)));
}

e chiama questa funzione:

isMobile(navigator.userAgent || navigator.vendor || window.opera)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.