16 votes

Pourquoi le reniflage du navigateur n'est-il pas une pratique recommandée ?

On l'entend partout : l'utilisation de javascript pour renifler la chaîne user agent afin de détecter les versions des navigateurs est une très mauvaise chose. La dernière version de jQuery a maintenant déprécié la fonction $.browser à la place de l'objet $.support . Mais que dois-je faire s'il y a un bogue ou un problème qui n'affecte qu'IE et pas les autres navigateurs, et que je ne sais pas pourquoi ?

Dans mon cas, un code jQuery fait apparaître et disparaître une infobulle avec une animation au passage de la souris et à la sortie de la souris. Dans Internet Explorer, l'aspect est horrible et instable, la div de l'info-bulle changeant de taille avant de disparaître, et si vous passez votre souris sur un tas d'éléments avec l'info-bulle, cela tue le navigateur. Je n'ai aucune idée de la fonctionnalité particulière qu'IE ne "supporte" pas et que je devrais tester, donc il est beaucoup plus facile de simplement renifler IE et d'utiliser une méthode différente. Que pourrais-je/devrais-je faire à la place ?

2voto

jinglesthula Points 940

Ce n'est pas recommandé car les navigateurs mentent sur leur identité. Voir http://farukat.es/journal/2011/02/499-lest-we-forget-or-how-i-learned-whats-so-bad-about-browser-sniffing (un article de l'auteur de la bibliothèque modernizr).

En outre, elle n'est pas à l'épreuve du temps. Extrait de l'article :

Le reniflage de navigateur est une technique dans laquelle vous faites des suppositions sur comment un morceau de code fonctionnera dans le futur. En général, cela signifie supposer qu'un bogue spécifique du navigateur sera toujours présent. - ce qui conduit fréquemment à la rupture du code lorsque les navigateurs apportent des modifications et corrigent les bogues.

La détection des fonctionnalités est recommandée car elle est beaucoup plus simple, permet une intention plus claire dans le code et évite complètement le problème des navigateurs qui mentent sur leur identité.

1voto

user2019515 Points 2166

Recherchez les fonctionnalités, pas les agents utilisateurs. Pseudocode :

if (browser.supports('feature')){
    //execute feature
}

else{
    //fallback
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X