IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Détecter navigateur et version


Sujet :

JavaScript

  1. #1
    kap
    kap est déconnecté
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Points : 72
    Points
    72
    Par défaut Détecter navigateur et version
    Bonjour,

    Je dois détecter le navigateur et sa version. J'ai regardé la FAQ:
    http://javascript.developpez.com/faq...vig#navigateur mias cela ne me donne pas la version

    J'ai trouvé ce script:
    http://mrbool.com/how-to-detect-diff...vascript/25424
    mais il me renvoie Firefox 5 pour Firefox 10 (et je dois détecter firefox 10). Je ne maîtrise pas trop l'objet navigator. Savez-vous comment adapter le script précédent pour obtenir le bon numéro de version?

    Merci d'avance,
    Damien

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Pourquoi donc as-tu besoin de détecter FF10 ? (on en est quand même à la version 25 là...)

    Sinon, le browser detection n'est pas considéré comme une bonne technique, on lui préfère désormais le feature detection (vérifier si une fonctionnalité est implémentée par le navigateur) qui est beaucoup plus fiable.

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Salut,

    je vais commencer par te dire que la détectionde navigateur, ça ne se fait plus trop aujourd'hui. Il vaut mieux – comme l'a dit Bovino – tenter de détecter les fonctionnalités que tu souhaites utiliser, et agir en fonction de leur présence ou de leur absence.

    Une chose à savoir, c'est que les navigateurs trichent. Ils essayent de se montrer plus beaux qu'ils ne le sont réellement. Par exemple, Internet Explorer a voulu se faire passer pour Mozilla à une époque, et depuis il présente "Mozilla/5.0" au début de sa UAS (User-Agent String). Ça remonte à loin, et pour rester rétro-compatible, les UAS gardent les vieilles mentions et deviennent de plus en plus longues. Et donc, de plus en plus fastidieuses à analyser.

    Dis-toi aussi que l'utilisateur peut modifier les informations de son navigateur s'il le souhaite. Par exemple avec l'addon User-Agent Switcher, et je suis convaincu que de tels outils existent pour à peu près tous les navigateurs.

    Ceci étant dit, si tu souhaites « détecter » (en gardant à l'esprit l'incertitude de cette information) la version de Firefox, il suffit de chercher "Firefox/" dans la UAS, le numéro de version est juste après. Par exemple, moi j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Mozilla/5.0 (Windows NT 5.1; rv:25.0) Gecko/20100101 Firefox/25.0"
    Tu peux capturer le numéro avec une regexp, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    navigator.userAgent.match(/Firefox\/([\d.]+)/)

  4. #4
    kap
    kap est déconnecté
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Points : 72
    Points
    72
    Par défaut
    Parce que mon client n'a le droit pour des raisons de sécurité que d'utiliser Firefox 10 (et IE9) Je vais peut-être pouvoir me passer de la détection en faisant un try() catch().
    L'utilisation dans mon cas présent est le retour d'une requête AJAX qui est interprété d'une façon différente. Dans la majorité des navigateurs, la réponse est un objet JSON directement accessible, dans Firefox 10 je dois appliquer un JSON.parse() à la réponse...

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Ok mais alors, plutôt que multiplier les cas de tests pas fiables sur la version du navigateur, tu devrais simplement tester si le retour de requête est JSON ou pas (genre avec typeof … === "object" ou === "string").

  6. #6
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    (genre avec typeof … === "object" ou === "string").
    Juste je me permets d'ajouter : et faire attention au cas null car typeof null === "object" // true

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    mon client n'a le droit pour des raisons de sécurité que d'utiliser Firefox 10
    Il y a quand même des choses qui me fascinent (mais tu n'y es pour rien kap)... L'un des principaux intérêts des mises à jour, c'est justement de corriger des failles de sécurité découvertes... donc je vois mal le rapport entre la sécurité et l'obligation d'utiliser des versions obsolètes de logiciels susceptibles de contenir des failles de sécurité...
    Il faudra m'expliquer !

    Sinon
    Dans la majorité des navigateurs, la réponse est un objet JSON directement accessible
    Là je comprends pas trop non plus
    Quel navigateur interprète nativement une chaine comme du JSON sur une requête AJAX ?
    Une requête AJAX ne retourne (du fait des limitations de HTTP) que des chaines...

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Bonjour,
    quoi qu'il arrive ton oXMLHttpRequest.responseText doit être le même.

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Kap a raison, on peut recevoir du vrai JSON avec Ajax. Firefox 10 le supporte, mais pas Internet Explorer.
    https://developer.mozilla.org/en-US/..._Compatibility
    http://www.w3.org/TR/XMLHttpRequest2...se-entity-body

    Quoiqu'il en soit, l'idée reste la même : il vaut mieux tester la présence (et le type, et la nullité) de request.response plutôt que se baser sur des informations incertaines à propos du navigateur.

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    on peut recevoir du vrai JSON avec Ajax
    Certes, sauf que si j'en crois ton lien, ce serait plutôt "Firefox peut recevoir du vrai JSON avec Ajax" (dans la mesure où Opera utilise désormais webkit, on peut supposer qu'il ne supporte pas responseType='json').
    Ce qui est d'ailleurs curieux, c'est que kap expliquait l'inverse.
    En tout état de cause, je maintiens quand même que du fait du protocole HTTP, une requête AJAX ne peut recevoir en réponse que du texte, même si certaines méthodes de xhr2 permettent au navigateur de la transformer.

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Bovino Voir le message
    du fait du protocole HTTP, une requête AJAX ne peut recevoir en réponse que du texte, même si certaines méthodes de xhr2 permettent au navigateur de la transformer.
    Je ne vois pas ce que tu veux dire par là, il n'y a rien dans HTTP qui impose que le contenu transféré soit une chaîne de caractères texte. D'ailleurs, on peut faire des requêtes AJAX avec le mimeType application/octet-stream pour de l'envoi de fichiers divers. L'indication du type de données sert uniquement à faire des traitements automatiques à la réception pour recevoir un objet dans le type désiré. Ce n'est pas une contrainte technique

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    il n'y a rien dans HTTP qui impose que le contenu transféré soit une chaîne de caractères texte
    Tu veux dire en dehors de la nature même de HyperText Transfer Protocol ?

    Le fait qu'il y ai des mécanismes automatiques de traitement n'empêche pas que ce qui transite via HTTP est invariablement du texte, même s'il représente un flux d'autre chose.

  13. #13
    kap
    kap est déconnecté
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Points : 72
    Points
    72
    Par défaut
    Oups, j'avais pas vu toutes les réponses

    J'avoue ne pas trop savoir pour le JSON. Je fais mes requêtes AJAX via jQuery. Je ne sais pas si c'est qui jQuery (à priori non) ou le navigateur qui transforme le texte en JSON, ou encore la réponse qui est directement en JSON. CE que je sais, c'est qu'avec les navigateurs récents, j'accède directement à un objet JSON comme réponse de ma requête alors qu'avec Firefox10 c'est une chaîne.

    En tout cas, j'ai suivi votre conseil et je ne me base plus sur le type de navigateur pour traiter ma réponse. Merci de vos réponses

  14. #14
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Le fait qu'il y ai des mécanismes automatiques de traitement n'empêche pas que ce qui transite via HTTP est invariablement du texte, même s'il représente un flux d'autre chose.
    J'ai envie de dire que ça revient toujours à un paquet de zéros et de uns, donc si ça représente un flux d'autre chose, comme des données binaires ou des images, je ne vois pas pourquoi on parlerait de texte.

    Le mot hypertexte est historique, ça vient du fait qu'à l'origine les pages Web et les liens étaient purement textuels. Ca fait plus de vingt ans que le Web n'est plus seulement hypertexte mais aussi hypermedia.

Discussions similaires

  1. Détecter version navigateur internet explorer
    Par cmoiahmed dans le forum jQuery
    Réponses: 7
    Dernier message: 14/06/2013, 18h59
  2. Réponses: 3
    Dernier message: 07/04/2009, 21h39
  3. Détecter navigateur par défaut en Java
    Par lebulu dans le forum Général Java
    Réponses: 2
    Dernier message: 20/03/2008, 11h41
  4. [Configuration] Détecter des paramètres du navigateur client...
    Par Olish dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 08/10/2005, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo