Je recherche une fonction qui retourne une valeur booléenne si l'utilisateur a un navigateur mobile ou non.
Je sais que je peux utiliser navigator.userAgent
et écrire cette fonction en utilisant l'expression régulière, mais les agents utilisateurs sont trop divers pour différentes plates-formes. Je doute que faire correspondre tous les appareils possibles soit facile, et je pense que ce problème a été résolu plusieurs fois, il devrait donc y avoir une sorte de solution complète pour une telle tâche.
Je regardais ce site , mais malheureusement, le script est si cryptique que je n'ai aucune idée de comment l'utiliser à mon but, qui est de créer une fonction qui retourne vrai / faux.
Vary: User-Agent
à votre réponse, sinon la mise en cache des proxys stockera une version et l'enverra à l'autre type de navigateur. MaisVary: User-Agent
rend la réponse inaccessible dans IE.Réponses:
Utilisation de Regex (sur detectmobilebrowsers.com ):
Voici une fonction qui utilise une expression régulière incroyablement longue et complète qui renvoie une valeur
true
oufalse
selon que l'utilisateur navigue avec un mobile ou non.Pour ceux qui souhaitent inclure des tablettes dans ce test (bien que sans doute, vous ne devriez pas), vous pouvez utiliser la fonction suivante:
La réponse originale
Vous pouvez le faire en parcourant simplement une liste d'appareils et en vérifiant si cela
useragent
correspond à quelque chose comme ça:Cependant, puisque vous pensez que cette méthode n'est pas fiable, vous pouvez supposer que tout appareil ayant une résolution de 800x600 ou moins est également un appareil mobile, ce qui réduit encore plus votre cible (bien que de nos jours, de nombreux appareils mobiles aient des résolutions beaucoup plus grandes que cela)
c'est à dire
Référence:
la source
|android|ipad|playbook|silk
à la première expression régulière.Que diriez-vous:
... puisque les smartphones prennent généralement en charge cette propriété et les navigateurs de bureau ne le font pas.
EDIT: Comme l'a souligné @Gajus, cette solution est désormais obsolète et ne doit pas être utilisée ( https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation )
la source
window.orientation
est une propriété obsolète ( developer.mozilla.org/en-US/docs/Web/API/Window/orientation , compat.spec.whatwg.org/#dom-window-orientation ) que certains navigateurs mobiles choisissent de prendre en charge pour des raisons inconnues . Les mêmes navigateurs implémententwindow.screen.orientation
(qui est également défini dans les navigateurs de bureau). Je peux seulement supposer qu'ilwindow.orientation
est laissé là pour des raisons héritées et ne doit donc pas être utilisé dans de nouvelles applications.Comment utiliser
Pour vérifier si l'utilisateur se trouve sur un appareil mobile spécifique:
Réf: http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript
Version améliorée sur github: https://github.com/smali-kazmi/detect-mobile-browser
la source
any()
un for ... en boucle deisMobile
membres ORed ?Voici une solution simple de la source de la fronde de facebook
la source
Je suis venu ici à la recherche d'un moyen simple et propre de détecter les "appareils à écran tactile", que je classe comme mobiles et tablettes. N'a pas trouvé de choix correct dans les réponses actuelles, mais a élaboré les éléments suivants qui peuvent également aider quelqu'un.
Modifier : pour prendre en charge les ordinateurs de bureau avec écran tactile et mobiles en même temps, vous pouvez utiliser les éléments suivants:
la source
touchstart|end|etc
.navigator.maxTouchPoints
(pas dems
préfixe). Il y a aussi un article MDN à vérifier.Comme beaucoup l'ont déclaré, il est problématique de se fier à la cible mobile des données de l'agent utilisateur. La même chose peut être dite pour compter sur la taille de l'écran.
Mon approche est empruntée à une technique CSS pour déterminer si l'interface est tactile:
En utilisant uniquement javascript (prise en charge par tous les navigateurs modernes), une correspondance de requête multimédia peut facilement déduire si l'appareil est mobile .
la source
Selon l'article de MDN sur la détection de navigateur à l'aide de l'agent utilisateur , il est encouragé d'éviter cette approche si possible et de suggérer d'autres voies telles que la détection de fonctionnalités.
Cependant, si l'on doit utiliser l'agent utilisateur comme moyen de détecter si l'appareil est mobile, ils suggèrent:
Par conséquent, cette doublure suffira:
const isMobileDevice = window.navigator.userAgent.toLowerCase().includes("mobi");
[MISE À JOUR]:
Comme @ zenw0lf le suggère dans les commentaires, l'utilisation d'une expression régulière serait préférable:
const isMobileDevice = /Mobi/i.test(window.navigator.userAgent)
la source
.includes
pas sopport par IE-11Mobile
dans la chaîne d'agent utilisateurIf the device is large enough that it's not marked with “Mobi”, you should serve your desktop site (which, as a best practice, should support touch input anyway, as more desktop machines are appearing with touchscreens).
const isMobile = /Mobi/.test(window.navigator.userAgent)
Il n'y a pas de solution parfaite pour détecter si le code JS est exécuté sur un navigateur mobile, mais les deux options suivantes devraient fonctionner dans la plupart des cas.
Option 1: reniflement du navigateur
Ce code renifleur de navigateur particulier est celui d' une bibliothèque appelée isMobile .
Option 2: fenêtre.orientation
Testez si
window.orientation
est défini:Remarque
Tous les appareils à écran tactile ne sont pas mobiles et vice versa. Donc, si vous souhaitez implémenter quelque chose spécifiquement pour l'écran tactile, vous ne devriez pas tester si votre navigateur est exécuté sur un appareil mobile mais plutôt si les appareils prennent en charge l'écran tactile:
la source
window.orientation
solution, mais les docs disent qu'elle est obsolète! developer.mozilla.org/en-US/docs/Web/API/Window/orientationVoici une solution userAgent plus efficace que match ...
la source
/iphone|etc/i.test(navigator.userAgent)
Pour ajouter une couche de contrôle supplémentaire, j'utilise le stockage HTML5 pour détecter s'il utilise le stockage mobile ou le stockage de bureau. Si le navigateur ne prend pas en charge le stockage, j'ai un tableau de noms de navigateur mobile et je compare l'agent utilisateur avec les navigateurs du tableau.
C'est assez simple. Voici la fonction:
la source
sessionStorage.desktop
n'existe pas dans Safari, Chrome ou Firefox (toutes les dernières versions au moment de la publication). Vous obtenez un vote positif, car votre solution va dans une meilleure direction que les autres. Mais n'oubliez pas d'utiliser à lavar mobile =
place demobile =
.La détection des fonctionnalités est bien meilleure que d'essayer de déterminer sur quel appareil vous êtes et très difficile de suivre les nouveaux appareils qui sortent tout le temps, une bibliothèque comme Modernizr vous permet de savoir si une fonctionnalité particulière est disponible ou non.
la source
Que diriez-vous quelque chose comme ça?
la source
screen.width
place? Il me semble que c'est plus fiable quewindow.matchMedia
.Une fois que l'élément gagne en concentration, vous le brouillez immédiatement. Bootstrap-datepicker, qui est un composant très populaire et bien entretenu avec près de 10 000 étoiles dans GitHub, utilise cette approche:
https://github.com/uxsolutions/bootstrap-datepicker
Merci à Tigger pour son aide.
la source
Un très bon moyen de détecter les appareils mobiles ou tablettes consiste à vérifier si le navigateur peut créer un événement tactile.
Code JavaScript simple:
Cela a très bien fonctionné pour moi, mais il peut y avoir un problème avec les appareils portables qui incluent un écran tactile.
Je ne sais pas si un ordinateur portable à écran tactile sera détecté comme un appareil mobile car je ne l'ai pas encore testé.
la source
Voici ma solution repensée pour le problème. Toujours pas parfait. La seule vraie solution serait que les fabricants d'appareils commencent à prendre au sérieux les chaînes d'agent utilisateur "Mobile" et "Tablette".
Que se passe-t-il lorsque la tablette Nexus 7 n'a que la chaîne Android UA? Tout d'abord, le mobile devient vrai, puis la tablette devient également vraie, mais la tablette supprimera la chaîne Mobile UA de la balise body.
CSS:
alert
lignes ajoutées pour le développement. La console Chrome peut émuler de nombreux appareils portables. Testez-le.ÉDITER:
Ne l'utilisez pas, utilisez plutôt la détection des fonctionnalités. Il y a tellement d'appareils et de marques que cibler une marque ne sera JAMAIS la bonne solution.
la source
Je vous conseille de consulter http://wurfl.io/
En bref, si vous importez un petit fichier JS:
il vous restera un objet JSON qui ressemble à:
(c'est en supposant que vous utilisez un Nexus 7, bien sûr) et vous pourrez faire des choses comme:
Voilà ce que vous recherchez.
Avertissement: je travaille pour l'entreprise qui propose ce service gratuit. Merci.
la source
voici un one liner
la source
Dépend du cas d'utilisation. Tous les appareils mobiles nécessitent une batterie. Si vous cherchez à calculer la puissance sans vider la batterie, utilisez l' API d'état de la batterie :
Si ce que vous recherchez est une utilisation de présentation
matchMedia
, qui renvoie une valeur booléenne:Ou combinez-les pour une expérience utilisateur encore meilleure sur les tablettes.
la source
Voici une solution ECMAScript 6 (prête pour TypeScript)
la source
if
condition au lieu d'avoir toute cettecheck
variable?Il existe une astuce simple pour détecter s'il s'agit d'un appareil mobile ou non. Vérifiez simplement si l' événement ontouchstart existe:
la source
J'ai fait face à certains scénarios où les réponses ci-dessus ne fonctionnaient pas pour moi. J'ai donc trouvé ça. Pourrait être utile à quelqu'un.
Cela dépend de votre cas d'utilisation. Si vous vous concentrez sur l'utilisation de l'écran
screen.availWidth
, ou vous pouvez utiliserdocument.body.clientWidth
si vous souhaitez effectuer un rendu basé sur le document.la source
Le meilleur doit être:
Mais comme le dit Yoav Barnea ...
Après ces 3 tests, j'espère que var isMobile est ... ok
la source
Voici la fonction complète
la source
vous pouvez également suivre ce tutoriel pour détecter un mobile spécifique. Cliquez ici .
la source
Mobile
à votre RXqu'en est-il de l'utilisation de "window.screen.width"?
ou
Je suppose que c'est le meilleur moyen car il y a un nouvel appareil mobile tous les jours!
(même si je pense que ce n'est pas pris en charge par les anciens navigateurs, mais essayez :))
la source
Notez que la plupart des appareils mobiles de nouvelle génération ont désormais des résolutions supérieures à 600x400. c'est à dire, un iPhone 6 ....
Preuve de test: a exécuté les articles les plus votés et les plus récents ici, avec une vérification facultative une fois exécutée comme suit:
D'une manière ou d'une autre, les résultats suivants ont été renvoyés sur les applications de navigateur suivantes. Spécifications: iPhone 6S, iOS 10.3.1.
Safari (dernier): détecté en tant que mobile.
Chrome (dernier): ne l'a pas détecté en tant que mobile.
SO, j'ai ensuite testé la suggestion de Lanti ( https://stackoverflow.com/a/31864119/7183483 ), et elle a renvoyé les bons résultats (mobile pour tous les appareils iOS et bureau pour mon Mac). Par conséquent, j'ai procédé à un peu de modification car il se déclencherait deux fois (pour mobile et tablette). J'ai ensuite remarqué lors des tests sur un iPad, qu'il est également revenu en tant que mobile, ce qui est logique, car les paramètres que Lantiutilise plus que tout le système d'exploitation. Par conséquent, j'ai simplement déplacé la déclaration IF de la tablette à l'intérieur du chèque mobile, qui retournerait mobile si le chèque de la tablette était négatif, et la tablette sinon. J'ai ensuite ajouté la clause else pour que le chèque mobile revienne en tant qu'ordinateur de bureau / ordinateur portable, car les deux sont admissibles, mais j'ai remarqué que le navigateur détecte la marque du processeur et du système d'exploitation. J'ai donc ajouté ce qui est retourné là-dedans dans le cadre de l'instruction else if à la place. Pour couronner le tout, j'ai ajouté une mise en garde sinon au cas où rien n'aurait été détecté. Voir ci-dessous, sera bientôt mis à jour avec un test sur un PC Windows 10.
Oh, et j'ai également ajouté une variable 'debugMode', pour basculer facilement entre le débogage et la compilation normale.
Avertissement: Plein crédit à Lanti , également que cela n'a pas été testé sur les tablettes Windows ... qui pourraient renvoyer un ordinateur de bureau / portable, car le système d'exploitation est Windows pur. Vérifie une fois que je trouve un ami qui en utilise un.
la source
Ce n'est qu'un port es6 de la réponse acceptée que j'utilise dans mon projet. Notez que cela inclut également les tablettes.
la source
Que diriez-vous de cela, il développe la réponse ci-dessus mais vérifie également la taille de l'écran
la source
Utilisation de Regex (sur detectmobilebrowsers.com ):
la source
Cela pourrait également être une solution.
Si vous utilisez les deux méthodes, vous obtiendrez un moyen parfait de détecter différents appareils.
la source