Une lettre ouverte du WebStandards Project : Chers développeurs Web, la détection des navigateurs est stupide, surtout quand elle est mal faite, basée sur l'identification des navigateurs et leurs supposées fonctionnalités, plutôt que sur leurs capacités réelles. C'est bien le propos d'un (trop) long article de mon collègue Bob Clary. En substance :

  • Eviter autant que possible la détection des navigateur en produisant du code conforme valide aux standards. Si ce n'est pas possible, respecter les points ci-dessous.
  • Réserver la détection par la chaîne UserAgent aux script coté serveur
  • Eviter l'utilisation de détection dans les scripts
  • Enfin, s'il est absolument nécessaire de détecter quel navigateur est utilisé pour savoir si une fonctionnalité est disponible, ne pas assumer qu'une fonctionnalité est disponible sous prétexte qu'on a détecté le navigateur utilisé. A la place, avant d'utiliser une fonction, verifier qu'elle existe.

En effet, il n'est pas possible de présumer de l'existence d'une fonctionnalité suite à une détection de navigateur. Par exemple, il et techniquement possible qu'un développeur utilise le code source de Gecko (le moteur de rendu de Netscape 6/7 et Mozilla) pour créer un nouveau navigateur qui supporterait l' élément JavaScript document.all, qui n'existe pour l'instant que dans Internet Explorer. Et alors ?, me direz-vous. Il se trouve que de nombreux webmestres, dans leur code JavaScript, vérifient si document.all existe. Si oui, ils considèrent que le navigateur utilisé est Internet Explorer, et ont recours à des fonctionnalités qui n'existent que dans ce dernier. Si document.all n'existe pas, ils considèrent à tort qu'il s'agit alors de Netscape Communicator 4.x (obsolète), et ils font alors appel aux fonctionnalités propriétaires de celui-ci. Si un navigateur respectueux des standards tel que Opera 7 (actuellement en version Beta), Netscape 6/7, Mozilla ou Konqueror arrivent sur cette page, ils se voient offrir soit du code propriétaire Microsoft, soit du code propriétaire Netscape 4, qu'ils ne supportent pas. Par conséquent, il ne peuvent ni exécuter le script ni afficher la page correctement. Comme pour brouiller plus encore les cartes, ajoutons à cela que Opera 7 et Konqueror respectent les standards tout en implémentant document.all. Pire encore, Opera 7, par défaut, s'identifie comme étant Internet Explorer. Tout cela fait que la détection des navigateurs est passé du rang d'art à celui de magie noire, avec les incertitudes que cela implique, et les problèmes de maintenance associés.

Cette perspective peut paraître catastrophique, mais elle est largement contrebalancée par le fait que tous les navigateurs récents (IE6 Win, IE5 Mac, AOL pour Mac OSX, Mozilla, Netscape 6 et 7, tout ce qui est basé sur Netscape Gecko et Konqueror) ont un support grandissant des standards, ce qui implique qu'en développant pour les standards, en n'utilisant plus de fonctionnalités propriétaires (par ex. document.all, document.layer), on peut produire des sites web en se souciant de moins en moins de la plate-forme cible. Pour le web développeur formé au bon vieux temps de la Net-Economie et de deux navigateurs dominants (IE5 et Netscape 4.5), c'est indéniablement une révolution. Et dans une révolution, il y a toujours un voix qui s'élève pour chanter des lendemains meilleurs, ceux ou l'on ne produira plus qu'une seule version d'un site, pour tous les navigateurs, y compris les handicapés. Et je le prouve : le StandBlog est accessible, rapide à charger, il fonctionne sur tous les navigateurs récents, et il est même utilisable par l'antique Netscape 4. Le seul problème, c'est que le type qui chante fini toujours égorgé :-D