Meurs user agent, meurs!!!

Attention: Les informations de ce billet sont susceptibles d'être obsolètes car vieux de plus 2 ans.

Warning: The information you are reading may be obsolete, this post was published more than 2 years ago.

Il y a quelques temps, à la sortie de Chrome, je m’insurgeais contre les user agents et surtout les développeurs qui ce sont rués comme des mouches sur un tas de merde, sur cette chaîne de caractère immonde et inutile pour déterminer comment différencier Chrome de Safari. Et bien j’en remets une couche cette fois-ci et ma vindicte se focalise cette fois-ci contre les seniors développeurs ou ceux qu’on appellent les Gurus du Javascript… mais le sont-ils vraiment ?

Il existe dans ce bas monde qu’est l’internet des applications qui ont le don de m’agacer au plus haut point. Toutes ces applications dites Web 2 voire Web 3. C’est applications, dont certaines sont utilisées par la majorité des web surfeurs, tout les jours, ont été atteintes de la maladie de l’Ajaxite aiguë, dont le principal symptôme est qu’elles reposent sur l’utilisation abusive de la  méthode XMLHTTPRequest. Cette utilisation intensive a conduits les gurus derrière ce type d’application à recourir à toutes sortes de techniques obscures et à de la technologies vaudoux comme l’utilisation de tableaux de statistiques pour déterminer sur quel navigateur et sur quel OS la version full Ajax peut-être utilisée ou pas. Qu’on se le disent, ces sites n’ont pas été codés par vous ou moi, non , ils ont été codés par des êtres à l’intelligence supérieure venu d’une lointaine galaxie et repartis depuis. Sans aucune modestie et/ou sarcasme, je l’avoue même avec une avance de 10 années je n’aurais jamais pu coder seul ne serait-ce que le 1/4 du 1/10 d’une de ces applications. Mais au delà de ses louanges méritées, il y a quand même un truc qui m’exaspère c’est que ces sites, censée être la vitrine de ce que le Javascript à de mieux à offrir en termes d’expériences internet ne respecte pas le B-A-ba du coding.

Récemment pour un projet que je devais développer j’ai du installer un plugin fort intéressant que je recommande à tous développeur, bon ou mauvais, User Agent Switcher. Cette extension à Firefox permet de jongler entre  les user agents les plus courants, voire de générer un user agent spécifique. Vous me direr à quoi cela sert-il ? Et bien cela sert à faire comprendre à n’importe quel développeur que la majorité des sites du Web 2 se moquent du monde. Il m’a suffit de changer le user agent à  de mon Firefox pour qu’il devienne inutilisable sur la majorité des sites Web 2.0 dont Gmail/Google docs , Facebook et j’en passe!!  Mais ce n’est pas possible, me direz vous, et pourtant c’est vrai!! Je trouve inadmissible de se voir interdit l’entrée d’un site parce que mon user agent contient le mot Tirefox en lieu est place de Firefox. C’est stupide mais ainsi va la vie dans le monde des développeurs. Que le code d’un site amateur mal référencé et inconnu de la majorité bug ou plante à cause d’un user agent mal placé, je peux le concevoir, mais que des sites dit mainstream plante lamentablement à cause de cela.. c’est inacceptable!!! Et le pire c’est le message que l’application vous envoie… Votre navigateur n’est pas supporté, veuillez télécharger un navigateur récent compatible comme Firefox 🙁 … A méditer

14 thoughts on “Meurs user agent, meurs!!!

  1. Ta stupidité me laisse sans voix. T’es tu au moins demandé pourquoi les développeurs avaient recours au user agent sniffing dans leurs applications ?

    • Oui je me le suis demandé… et quelque soit la réponse elle est erronée. La règle numéro 1 de tout bon codeur est ne jamais se fier à ce que que vous envoie votre client. Le user agent est envoyé par le client DONC il ne faut pas se fier à sa valeur, c’est aussi simple que cela. Tous les navigateurs récents sont capable via le user agent de mimer les autres navigateurs. Donc non, je ne suis pas stupide..il existe l’object detection et jusqu’à preuve du contraire c’est la seule et unique manière de gérer et de suivre correctement l’évolution d’un script, d’une application quelque soit sa taille et son impact. Empêcher un utilisateur de surfer sur son site parce qu’on a Firefox ou IE là réside la stupidité. Désolé si mon propos te choque 😉

  2. À vrai dire, j’ai du mal à croire qu’on puisse considérer les exemples que tu cites comme le fait de “gurus qui rox trop”, même si ce sont des grosses apps. Je m’explique.

    Bien sûr, ce sont des prouesses techniques, mais si on prend en compte les dernières considérations en terme de bonnes pratiques pour le javascript, le plus important avant tout est d’être non obstrusif. JS doit permettre de rajouter une couche de confort dans l’application ; l’application ne doit pas reposer dessus.

    Finalement, le problème que je vois dans les exemples que tu cites, ce n’est pas tant que l’application teste le user-agent, mais qu’elle refuse de fonctionner en cas d’erreur.

    La manière la plus juste de faire ces applications aurait été de les faire fonctionner sans js et donc sans détection de user agents, et si js fonctionne et que le user agent est correctement détecté, on procède à l’amélioration de l’interface.

    Après, si un utilisateur s’amuse a modifier la manière dont se présente son navigateur, j’ai envie de dire : tant pis pour lui 🙂 Un peu comme quand on teste des urls au hasard dans une app, ca marche pas, ben oui.

    • le problème n’est pas un problème d’accessibilité, ça c’est un autre débat, le problème est un problème de “good practice” comme on dit en bon français. Ici ce qui est interpellant, c’est que, si demain, un navigateur lambda sort en prétendant respecter parfaitement les règles du W3C ( JS et du CSS compris) avec son propre user agent, il se verra priver l’accès à tous ces sites alors que lambda pourrait très bien fonctionner sur les sites incriminés, c’est cela qui est aberrant…

  3. La lecture de ton billet m’a laisser assez incrédule, mais c’est en voyant les commentaires et surtout tes réponses que j’ai mieux compris le message que tu essaye de transmettre;

    Je ne peux qu’être d’accord avec toi sur le fait que de grosses applications testent le user-agent, et interdissent l’accès si celui-ci ne convient pas, mais développant moi même des applications web faites pour fonctionner sur tous les systèmes, je ne peux que comprendre pourquoi ces services ont bloquer l’accès au site: mauvais affichage si mauvais navigateur;

    Et sur ce dernier point, je pense que nous savons tous les catastrophes que peuvent provoquer ces mauvais élèves des navigateurs.

    Mais lorsque l’on voit la difficulté de programmer un site convenable qui tienne aussi bien la route sur firefox x que sur Ie 6, peut-on incriminer de la sorte les programmeurs qui sont derrière ces logiciels et qui ont voulu assurer le rendu final de leurs production?

    Personnellement, je continuerais d’utiliser ce genre de méthode, à la grosse différence que je redirige vers une page qui redirige vers une copie du site adapté aux grosses m…. comme Ie6

    • @Black_Arcom je pense que je me suis mal fait comprendre et pourtant j’ai essayé d’être clair 😀 .
      Imagine que tu veuilles prendre une autoroute avec ta voiture mais qu’au moment ou tu t’engages tu changes la station radio que tu écoutes et du coup ta voiture se voit détourner automatiquement sur une nationale. Tu serais en rage je suppose et tu te poserai directement la question, en quoi le fait de changer la station que tu écoutes a un rapport quelconque avec le fait que tu veuilles prendre l’autoroute … aucune!!!
      Et bien tu vois la détection avec le user agent c’est la même chose. Donc me dire que tu vas continuer à utiliser cette technique est tout sauf logique. Si ma voiture ne peut techniquement pas prendre l’autoroute j’accepte la redirection. Mais si elle en est capable et que malgré cela tu me refuse l’accès sous prétexte que ma radio n’écoute pas la bonne station radio que tu estimes être la meilleur pour moi à ma place là tu m’emmerde 😀 (en tout bien tout honneur 😉 ) … Voila pourquoi je déteste la détection via les user agents. Ce n’est pas une question d’accessibilité, ce n’est pas une question de navigateur, c’est juste une question de bon sens.

  4. La, il y à deux cas qu’il faut tout de même différencier: on a d’une part la détection de presque tous les users agents comme tu l’a citer, et d’autre part la détection des vieilles plaies comme Ie < 7, comme je peux la faire.

    Je ne te dit pas que je bloque sur mes sites les navigateurs récents différents d’une sélection précise, mais bien les anciennes versions d’Ie qui à mon sens sont des daubes qui obligent les Webmasters à contourner les problèmes avec des solutions farfelus…

    Pour le reste, en général je teste mes sites avec les navigateurs récents les plus utilisés, après si tu désire prendre un navigateur lambda, qui est censé respecter les standards, je ne voit pas le problème, puisque je les respect dans ma manière de coder.

    D’ailleurs c’est pour continuer à respecter ces standards que je différencie les vieilles versions, dont l’adaptation par les hacks bouffent le plus souvent la validité de ton code…

    Cela dit, si tu connait une autre méthode, je suis preneur 😉

    • Je pense qu’il faut recadrer le débat
      1) je parle de javascript… et tu devrais savoir que la différence de comportement entre IE6 et IE7 au niveau du Javascript et quasi nul! Tout script qui fonctionne sous IE7 fonctionnera de facto sous IE6 (à quelques nuances près).
      2) En javascript il existe l’object detection une méthode simple et efficace qui te permet de tester les possibilités de tous les navigateurs quelque soit leur version et leur marque
      3) Je ne comprends pas pourquoi tu focalises ta haine sur IE6 en particulier puisque ce problème affecte tous les navigateurs quelque soit leur version.
      4) Ce n’est pas une question d’accessibilité, ce n’est pas une question de navigateur, c’est juste une question de code. Je le répète ici car on dirait que tu n’as pas lu en entier ma dernière réponse.
      Ce que je dis était vrai hier, est vrai aujourd’hui et restera vrai demain. Se fonder sur le user agent pour filtrer mon accessibilité javascript à un site est la pire des solutions.

  5. Je voit, je pensais que tu parlais de l’utilisation du user agent dans des cas plus larges, d’où ma méprise…

    Mais je n’ai pas de “haine” pour Ie6, je trouve simplement regrettable que l’on soit obligé d’utiliser des hacks et autres trucs farfelus pour un affichage convenable de son site…

    Sinon pour l’utilisation du user agent en ce qui concerne le javascript, je suis ok avec toi.

  6. Si tu codes comme tu écris, ça doit pas être triste…

    J’en ai lu des conneries sur la Toile mais toi, tu bats tous les records !

    • Juste pour infos… j’aimerai savoir ce que tu nommes conneries dans mon argumentaire… comme ça mon code se verra améliorer par tes lumières qui semblent pour l’instant m’aveugler

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.