Je serais intéressé de savoir quel serait le meilleur endroit pour détecter l'agent utilisateur du client, côté client (javascript) ou côté serveur? J'ai soulevé la question en raison du fait que certains utilisateurs d'IE8 reçoivent un message disant qu'ils utilisent IE6.Quelle est la meilleure façon de détecter l'agent utilisateur d'un client?
Répondre
La réponse courte et correcte est: n'utilisez rien qui repose sur le reniflage UserAgent.
Pour être en mesure d'ajuster les chemins de code, vous devez tester la 'chose' spécifique à laquelle le chemin de code est ajusté, principalement les caractéristiques. C'est ce qu'on appelle Feature Detection. Donc, si la fonctionnalité X est supportée, nous le faisons, sinon nous le faisons. Déduire si une fonctionnalité est prise en charge sur la base de quel UserAgent est présent échouera rapidement, en particulier lorsque de nouveaux navigateurs sont marqués.
Prenons l'exemple suivant, qui peut effectivement être trouvée dans plusieurs grandes bibliothèques (!)
if (isIE8) {
// use new feature provided by IE8
} else if (isIE7) {
// use not so new feature provided by IE7 (and IE8)
} else {
// use fallback for all others (which also works in IE7 and IE8)
}
Que pensez-vous qui se passe quand IE9 arrive?
Le modèle correct dans ce cas serait
if ("addEventListener" in foo) {
// use DOM level 2 addEventListener to attach events
foo.addEventListener(...
} else if ("attachEvent" in foo) {
// use IE's proprietary attachEvent method
foo.attachEvent(...
} else {
// fall back to DOM 0
foo["on" + eventName] = ....
}
Alors, quelle serait la meilleure façon de résoudre ce problème? – westoque
em .. l'enlever? Le code doit utiliser la fonction de détection de fonction et non UserAgent Sniffing pour adapter ses chemins de code –
+1. Sean a absolument raison. L'article de Peter Michaux sur la détection de caractéristiques est un bon point de départ: http://michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting –
L'agent utilisateur disponible sur les deux côtés doit être le même, à moins qu'il ne se passe des choses amusantes, ce qui n'est normalement pas le cas.
Si vous souhaitez afficher un message aux utilisateurs IE6, je vous suggère d'utiliser conditionalcomments. Ils sont une fonctionnalité spécifique à IE et fonctionnent très bien pour détecter les versions IE.
+1 pour l'utilisation de commentaires conditionnels pour détecter la version IE. – Brian
Les informations trouvées par la détection côté client ou serveur est fondamentalement la même. Gardez à l'esprit qu'il est extrêmement facile d'usurper le navigateur dans lequel vous vous trouvez. Il n'y a aucun moyen sûr de détecter tous les types de navigateur avec précision.
je ne sais pas comment vous vérifiez pour l'agent utilisateur, mais je ferais de cette façon:
<%=
case request.env['HTTP_USER_AGENT']
when /Safari/
"it's a Mac!"
when /iPhone/
"it's a iPhone"
else
"i don't know :("
end
%>
vérifier directement dans la requête de l'utilisateur semble être la façon la plus cohérente pour vérifier la navigateur de l'utilisateur. Et le request.env est disponible dans votre contrôleur et vos vues, donc vous pouvez le passer à rjs si nécessaire.
Pour ceux qui besoin pour obtenir l'agent utilisateur réel en utilisant JavaScript, vous pouvez utiliser navigator.userAgent
- 1. Quelle est la meilleure façon de détecter la couleur blanche?
- 2. Quelle est la meilleure façon de concevoir une API client?
- 3. Quelle est la meilleure façon de détecter qu'Adobe Acrobat Reader est installé à partir d'un navigateur?
- 4. Quelle est la bonne façon de détecter window.unload dans sproutcore
- 5. Quelle est la meilleure façon d'apprendre WCF?
- 6. Quelle est la meilleure façon d'exécuter `sum_by_sql`?
- 7. Quelle est la meilleure façon d'implémenter hashCode()?
- 8. Quelle est la meilleure façon d'apprendre CUDA?
- 9. Quelle est la meilleure façon de charger la balance? PHP
- 10. Quelle est la meilleure façon de détecter si un IDataReader est vide?
- 11. Quelle est la meilleure façon de détecter qu'une URL est celle d'une image?
- 12. Quelle est la meilleure façon de détecter si un objet Javascript donné est un élément DOM?
- 13. Quelle est la meilleure façon de détecter si Excel 2003 est installé?
- 14. Quelle est la meilleure façon de détecter si un serveur proxy est disponible?
- 15. Quelle est la meilleure façon de détecter la distance entre deux iphone/ipod/ipad?
- 16. Quelle est la meilleure façon de détecter si un mot de NSString a un numéro?
- 17. Quelle est la meilleure façon de détecter le code de pays d'un site Web?
- 18. Quelle est la meilleure façon de faire XMLObject Validation
- 19. quelle est la meilleure façon d'analyser la requête brute d'utilisateur et détecter ce qui veulent rechercher
- 20. Quelle est la meilleure façon d'utiliser l'API Twitter via PHP?
- 21. Quelle est la meilleure façon de créer une bibliothèque client pour une API de service Web?
- 22. Quelle est la meilleure façon de gérer les images cassées?
- 23. Quelle est la meilleure façon de changer un mot de passe utilisateur à distance sous Unix?
- 24. Quelle est la meilleure façon de se déconnecter d'un autre utilisateur de sa session sur macOS?
- 25. Quelle est la meilleure façon de mettre en œuvre une machine d'état de l'interface utilisateur?
- 26. Quelle est la meilleure façon de permettre à un utilisateur de rechercher un fichier en C#?
- 27. Quelle est la meilleure façon d'effectuer des connexions de base de données par utilisateur dans Rails?
- 28. Quelle est la meilleure façon de trouver le répertoire de base d'un utilisateur arbitraire en Java?
- 29. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?
- 30. Quelle est la meilleure façon de sel mot de passe?
tangentiellement Note concernant: L'agent utilisateur dit MSIE 7.0 au lieu de MSIE 8.0 lors de l'utilisation vue de la compatibilité dans IE8. – Brian