Existe-t-il un moyen solide de détecter si un utilisateur utilise ou non un appareil mobile dans jQuery? Quelque chose de similaire à l'attribut CSS @media? Je voudrais exécuter un script différent si le navigateur est sur un appareil portable.
La $.browser
fonction jQuery n'est pas ce que je recherche.
javascript
jquery
mobile
browser-detection
superUntitled
la source
la source
Réponses:
Note de l'éditeur: la détection d'agent utilisateur n'est pas une technique recommandée pour les applications Web modernes. Voir les commentaires ci-dessous cette réponse pour la confirmation de ce fait. Il est suggéré d'utiliser l'une des autres réponses en utilisant la détection de fonctionnalités et / ou les requêtes multimédias.
Au lieu d'utiliser jQuery, vous pouvez utiliser un simple JavaScript pour le détecter:
Ou vous pouvez les combiner pour les rendre plus accessibles via jQuery ...
Maintenant
$.browser
, reviendra"device"
pour tous les appareils ci-dessusRemarque:
$.browser
supprimé sur jQuery v1.9.1 . Mais vous pouvez l'utiliser en utilisant le code du plugin de migration jQueryUne version plus approfondie:
la source
.This.Is.A.Bad.Idea.
Pour moi, petit est beau, donc j'utilise cette technique:
Dans le fichier CSS:
Dans le fichier jQuery / JavaScript:
Mon objectif était d'avoir mon site "mobile-friendly". J'utilise donc CSS Media Queries pour afficher / masquer les éléments en fonction de la taille de l'écran.
Par exemple, dans ma version mobile, je ne veux pas activer la Facebook Like Box, car elle charge toutes ces images de profil et tout ça. Et ce n'est pas bon pour les visiteurs mobiles. Donc, en plus de cacher l'élément conteneur, je le fais également à l'intérieur du bloc de code jQuery (ci-dessus):
Vous pouvez le voir en action sur http://lisboaautentica.com
Je travaille toujours sur la version mobile, donc ça ne semble toujours pas comme il se doit, au moment d'écrire ceci.
Mise à jour par dekin88
Il existe une API JavaScript intégrée pour détecter les médias. Plutôt que d'utiliser la solution ci-dessus, utilisez simplement ce qui suit:
Prise en charge du navigateur: http://caniuse.com/#feat=matchmedia
L'avantage de cette méthode est qu'elle est non seulement plus simple et plus courte, mais vous pouvez cibler conditionnellement différents appareils tels que les smartphones et les tablettes séparément si nécessaire sans avoir à ajouter des éléments factices dans le DOM.
la source
screen.width
propriété est un global. Il n'est pas nécessaire d'ajouter arbitrairement un élément au DOM et d'apporter inutilement des requêtes multimédia CSS. De plus, si le navigateur est sur un bureau et que l'utilisateur redimensionne la fenêtre, il$is_mobile
ne sera pas mis à jour.if( screen.width <= 480 ) { // is mobile }
width
valeur d'attribut IIRC. Par conséquent, un iPhone de la rétine aurawidth
de640
et une hauteur de960
en mode portrait, etwidth
de960
et une hauteur de640
dans le paysage.window.matchMedia
: developer.mozilla.org/en-US/docs/Web/API/Window.matchMediaSelon Mozilla - Détection du navigateur à l'aide de l'agent utilisateur :
Comme ça:
Cela correspondra à tous les agents utilisateurs de navigateur mobile courants, y compris Mozilla mobile, Safari, IE, Opera, Chrome, etc.
Mise à jour pour Android
EricL recommande également de tester en
Android
tant qu'agent utilisateur, car la chaîne d'agent utilisateur Chrome pour les tablettes n'inclut pas "Mobi" (les versions de téléphone le font cependant):la source
/Mobi/i.test(navigator.userAgent)
cependant, car test () renvoie un booléen./Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)
Une doublure simple et efficace:
Cependant, le code ci-dessus ne prend pas en compte le cas des ordinateurs portables avec écran tactile. Ainsi, je propose cette deuxième version, basée sur la solution @Julian :
la source
isMobile
fonction que vous avez fournie revienttrue
sur mon appareil de destop !! (Google Chrome v44.0)Ce que vous faites en voulant détecter un appareil mobile se rapproche un peu trop du concept de «reniflement de navigateur» de l'OMI. Il serait probablement préférable de procéder à la détection de certaines fonctionnalités. Des bibliothèques comme http://www.modernizr.com/ peuvent vous y aider.
Par exemple, où est la frontière entre mobile et non mobile? Il devient de plus en plus flou chaque jour.
la source
Ce n'est pas jQuery, mais j'ai trouvé ceci: http://detectmobilebrowser.com/
Il fournit des scripts pour détecter les navigateurs mobiles dans plusieurs langues, dont JavaScript. Cela peut vous aider avec ce que vous recherchez.
Cependant, étant donné que vous utilisez jQuery, vous souhaiterez peut-être connaître la collection jQuery.support. Il s'agit d'une collection de propriétés pour détecter les capacités du navigateur actuel. La documentation est ici: http://api.jquery.com/jQuery.support/
Puisque je ne sais pas exactement ce que vous essayez d'accomplir, je ne sais pas lequel sera le plus utile.
Cela étant dit, je pense que votre meilleur pari est de rediriger ou d'écrire un script différent vers la sortie en utilisant un langage côté serveur (si c'est une option). Comme vous ne connaissez pas vraiment les capacités d'un navigateur mobile x, la détection et la logique d'altération côté serveur seraient la méthode la plus fiable. Bien sûr, tout cela est un point discutable si vous ne pouvez pas utiliser une langue côté serveur :)
la source
|android|ipad|playbook|silk
comme décrit dans la section à propos (c'est par conception)Parfois, il est souhaitable de savoir quel appareil de marque un client utilise afin d'afficher du contenu spécifique à cet appareil, comme un lien vers la boutique iPhone ou le marché Android. Modernizer est génial, mais ne vous montre que les capacités du navigateur, comme HTML5 ou Flash.
Voici ma solution UserAgent dans jQuery pour afficher une classe différente pour chaque type de périphérique:
Cette solution provient de Graphics Maniacs http://graphicmaniacs.com/note/detecting-iphone-ipod-ipad-android-and-blackberry-browser-with-javascript-and-php/
la source
Trouvé une solution dans: http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/ .
Et puis pour vérifier si c'est un mobile, vous pouvez tester en utilisant:
la source
Si par "mobile" vous voulez dire "petit écran", j'utilise ceci:
Sur iPhone, vous vous retrouverez avec une window.screen.width de 320. Sur Android, vous vous retrouverez avec une window.outerWidth de 480 (bien que cela puisse dépendre d'Android). Les iPad et les tablettes Android renverront des nombres comme 768 afin qu'ils obtiennent la vue complète comme vous le souhaitez.
la source
Si vous utilisez Modernizr , il est très facile à utiliser
Modernizr.touch
comme mentionné précédemment.Cependant, je préfère utiliser une combinaison de
Modernizr.touch
tests d'agent utilisateur pour des raisons de sécurité.Si vous n'utilisez pas Modernizr, vous pouvez simplement remplacer la
Modernizr.touch
fonction ci-dessus par('ontouchstart' in document.documentElement)
Notez également que le test de l'agent utilisateur
iemobile
vous donnera une plus large gamme d'appareils mobiles Microsoft détectés queWindows Phone
.Voir aussi cette question SO
la source
TouchEvent.supported
.('ontouchstart' in window)
est une alternative àModernizr.touch
, aussi, hacks.mozilla.org/2013/04/...~~V~~singular~~3rd|
au lieu de nombreuses correspondances. Vous n'avez pas non plus besoin dutoLowerCase()
car vous avez lei
modificateur. Ici:var isTouchDevice = Modernizr.touch || /iphone|ipod|ipad|android|iemobile|iphone|ipad|ipod|blackberry|bada/i.test(navigator.userAgent);
Vous ne pouvez pas compter
navigator.userAgent
, tous les appareils ne révèlent pas leur véritable système d'exploitation. Sur mon HTC par exemple, cela dépend des paramètres ("utilisation de la version mobile" on / off). Sur http://my.clockodo.com , nous avons simplement utiliséscreen.width
pour détecter les petits appareils. Malheureusement, dans certaines versions d'Android, il y a un bug avec screen.width. Vous pouvez combiner de cette façon avec userAgent:la source
Je sais que cette question a beaucoup de réponses, mais d'après ce que j'ai vu, personne n'approche la réponse de la façon dont je résoudrais cela.
CSS utilise la largeur (Media Queries) pour déterminer les styles appliqués au document Web en fonction de la largeur. Pourquoi ne pas utiliser la largeur dans le JavaScript?
Par exemple, dans les requêtes multimédias de Bootstrap (Mobile First), il existe 4 points de rupture / rupture:
Nous pouvons également l'utiliser pour résoudre également notre problème JavaScript.
Nous allons d'abord créer une fonction qui obtient la taille de la fenêtre et renvoie une valeur qui nous permet de voir quelle taille de périphérique affiche notre application:
Maintenant que la fonction est configurée, nous pouvons l'appeler et stocker la valeur:
Votre question était
Maintenant que nous avons les informations sur l'appareil, il ne reste plus qu'une instruction if:
Voici un exemple sur CodePen: http://codepen.io/jacob-king/pen/jWEeWG
la source
Small Devices range from 768 to 991 pixels.
que cela devrait êtrewindow.innerWidth < 992
(991 inclus) la même chose pour 1199, il devrait être <1200 à la placeDans une ligne de javascript:
Si l'agent utilisateur contient «Mobi» (selon MDN) et qu'un contact tactile est disponible, il s'agit probablement d'un appareil mobile.
la source
/Mobi/.test(navigator.userAgent)
...match
ne l'a pas fait pour moiJe suis surpris que personne n'ait signalé un beau site: http://detectmobilebrowsers.com/ Il a du code prêt à l'emploi dans différentes langues pour la détection mobile (y compris mais sans s'y limiter):
Et si vous devez également détecter les tablettes, consultez simplement la section À propos pour obtenir des paramètres RegEx supplémentaires.
la source
Si vous n'êtes pas particulièrement préoccupé par les petits écrans, vous pouvez utiliser la détection de largeur / hauteur. Ainsi, si la largeur est inférieure à une certaine taille, le site mobile est lancé. Ce n'est peut-être pas le moyen idéal, mais ce sera probablement le plus facile à détecter pour plusieurs appareils. Vous devrez peut-être en mettre un spécifique pour l'iPhone 4 (grande résolution).
la source
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
S'il est constaté que la simple vérification
navigator.userAgent
n'est pas toujours fiable. Une plus grande fiabilité peut être obtenue en vérifiant égalementnavigator.platform
. Une simple modification d'une réponse précédente semble mieux fonctionner:la source
Je vous conseille de consulter http://wurfl.io/
En bref, si vous importez un petit fichier JavaScript:
Vous vous retrouverez avec un objet JSON qui ressemble à:
(Cela suppose 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.
la source
Consultez cet article , il donne un très bel extrait de code pour savoir quoi faire lorsque des appareils tactiles sont détectés ou quoi faire si un événement touchstart est appelé:
la source
'ontouchstart' in document.documentElement
est probablement un meilleur test pour le support tactile quewindow.Touch
. Encore mieux, utilisez Modernizr.js ( modernizr.com ) parce que vous avez passé beaucoup de temps à essayer d'obtenir la bonne détection tactile. Vous pouvez voir leur code de détection tactile dans modernizr.com/downloads/modernizr.js si vous affichez le code de développement et effectuez une recherche sur "tactile".Voici une fonction que vous pouvez utiliser pour obtenir une réponse vraie / fausse indiquant si vous utilisez un navigateur mobile. Oui, il renifle le navigateur, mais parfois c'est exactement ce dont vous avez besoin.
la source
for
de ça! + Vous avez oublié de créer un RegExp. En voici une plus simple:return !!navigator.userAgent.match(new RegExp(agents.join('|'),'i'))
Toutes les réponses utilisent l'agent utilisateur pour détecter le navigateur, mais la détection de périphérique basée sur l'agent utilisateur n'est pas une très bonne solution, mieux vaut détecter des fonctionnalités telles que le périphérique tactile (dans le nouveau jQuery, elles sont supprimées
$.browser
et utilisées à la$.support
place).Pour détecter un mobile, vous pouvez vérifier les événements tactiles:
Tiré de Quelle est la meilleure façon de détecter un appareil à «écran tactile» en utilisant JavaScript?
la source
true
sur les PC de bureau avec écrans tactiles. stucox.com/blog/you-cant-detect-a-touchscreenJe proposerais d'utiliser la combinaison de chaînes suivante pour vérifier si le type d'appareil utilisé.
Conformément à la documentation de Mozilla, la chaîne
Mobi
est recommandée. Mais, certaines des anciennes tablettes ne retournent pas vrai si seulementMobi
est utilisé, donc nous devrions également utiliser laTablet
chaîne.De même, pour être du bon côté
iPad
, desiPhone
chaînes peuvent également être utilisées pour vérifier le type d'appareil.La plupart des nouveaux appareils retournaient uniquement
true
pour laMobi
chaîne.la source
la source
window.matchMedia("(pointer:coarse)").matches;
d'une réponse différente.Grande réponse merci. Petite amélioration pour prendre en charge Windows Phone et Zune:
la source
if (navigator.userAgent.match(/Android|webOS|iPhone|iPad|etc/)){self.location = "top.htm"}
Utilisez ceci:
Ensuite, utilisez ceci:
la source
Fonction simple basée sur http://detectmobilebrowser.com/
la source
Si vous utilisez un navigateur et si vous essayez d'obtenir navigator.userAgent, nous obtiendrons les informations du navigateur comme suit
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit / 537.36 (KHTML, comme Gecko) Chrome / 64.0.3282.186 Safari / 537.36
La même chose si vous faites dans le mobile, vous suivrez
Mozilla / 5.0 (Linux; Android 8.1.0; Pixel Build / OPP6.171019.012) AppleWebKit / 537.36 (KHTML, comme Gecko) Chrome / 61.0.3163.98 Mobile Safari / 537.36
Chaque navigateur mobile aura useragent avec une chaîne contenant "Mobile". J'utilise donc l'extrait ci-dessus dans mon code pour vérifier si l'agent utilisateur actuel est web / mobile. Sur la base du résultat, je ferai les changements requis.
la source
J'utilise ceci
la source
Que diriez-vous de mobiledetect.net ?
D'autres solutions semblent trop basiques. Il s'agit d'une classe PHP légère. Il utilise la chaîne User-Agent combinée à des en-têtes HTTP spécifiques pour détecter l'environnement mobile. Vous pouvez également bénéficier de Mobile Detect en utilisant l'un des plugins tiers disponibles pour: WordPress, Drupal, Joomla, Magento, etc.
la source
Les chaînes d'agent utilisateur ne doivent pas être approuvées seules. La solution ci-dessous fonctionnera dans toutes les situations.
et appelez cette fonction:
la source