Vous �tes ici : Accueil des cours Misfu > Informatique > Apprendre la programmation > Cours Javascript > La d�tection de navigateur

Traduction de la page Browser detect r�dig�e par Peter-Paul Koch et traduite par Christophe Bruggeman

La traduction est en cours, si vous trouvez une erreur sur une page ou si vous souhaitez sugg�rer une am�lioration, n'h�sitez pas � utiliser le forum.

La d�tection de navigateur

Les navigateurs d'AOL d'AOL ne peuvent pas �tre d�tect�s par du JavaScript, parce que Explorer 3, 4 ou 5 qu�il cache fait tout le JavaScript et peut s'annoncer comme Explorer 3, 4 ou 5.
Si vous devez avec certitude d�tecter les navigateurs d'AOL, vous devez employer un script c�t� serveur.

Pour le moment je d�tecte tous les d�riv�s de Mozilla en tant que Netscape 5.

Une fonction JavaScript tr�s pratique mais souvent sur�valu� est la d�tection de navigateur. Parfois vous aurez besoin de donner des instructions sp�cifiques ou chargez une nouvelle page au cas o� l�utilisateur utilise, par exemple, Netscape 3.

Si vous d�buter en Javascript, n'employez pas ce script. Veuillez d�abord lire la page sur la d�tection d'objet.

Exemple

D�tectons votre navigateur :

Pour d�marrer je d�crirai les variables dont vous avez besoin, puis je d�cris longuement le code d'identification du navigateur et son histoire assez compliqu�. Vient alors le script lui-m�me, suivi de son explication. Enfin je donne quelques bonnes raisons de ne pas employer du tout la d�tection de navigateur. Veuillez lire cette derni�re partie soigneusement si vous d�but� en JavaScript.

Les variables

En dessous vous voyez les objets contenus par l'objet navigator. Ces variables peuvent �tre lut et elles peuvent donner des informations sur le navigateur et l'ordinateur de vos utilisateurs. Naturellement les navigateurs emploient diff�rents noms pour ces m�thodes et propri�t�s, except� quelques anciens navigateurs.


navigator.userAgent = Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
navigator.platform = Win32
navigator.appCodeName = Mozilla
navigator.appName = Netscape
navigator.appVersion = 5.0 (Windows; fr)
navigator.language = fr
navigator.mimeTypes = [object MimeTypeArray]
navigator.oscpu = Windows NT 5.1
navigator.vendor =
navigator.vendorSub =
navigator.product = Gecko
navigator.productSub = 20060111
navigator.plugins = [object PluginArray]
navigator.securityPolicy =
navigator.cookieEnabled = true
navigator.onLine = true
navigator.javaEnabled = function javaEnabled() { [native code] }
navigator.taintEnabled = function taintEnabled() { [native code] }
navigator.preference = function preference() { [native code] }

Le code d�identification du navigateur

De ces variables, navigator.userAgent est la plus importante puisqu'elle est support�e par tous les navigateurs et elle donne l'information la plus compl�te.

navigator.userAgent = Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1

navigator.userAgent est identique �

Ce string peut contenir des informations correctes sur le navigateur, comme la version et le logiciel d'exploitation.

et ses probl�mes

Cependant, aucune loi n'exige des navigateurs qu�ils fournissent l'information correcte. De plus en plus de petits navigateurs offrent � leurs utilisateurs la possibilit� de commuter les codes d'identification.

La raison c�est que beaucoup de d�veloppeur web utilise la d�tection de navigateur pour s�assurer, par exemple, que leurs pages sont seulement accessibles dans Internet Explorer. Pour venir � bout de ce mauvais codage, les petits navigateurs ont besoins de changer leur code d'identification de sorte qu'ils peuvent eux aussi, acc�der � la page.

Dans Opera le code d�identification contient toujours Opera. Cependant, d'autres navigateurs (notamment safari et iCab) cachent compl�tement leur identit�, ils ne donnent aucun indice permettant de dire qu�ils ne sont en fait ni Netscape ni Explorer.

Il n'y a rien que vous puissiez faire pour eux, except� employer la d�tection d'objet � la place. Puisque de toute mani�re la d�tection d'objet est de loin sup�rieure � la d�tection de navigateur, je vous conseille de ne jamais employer un d�tecteur de navigateur � moins qu�il n�y est aucune autre fa�on pour vous d�obtenir l�information dont vous avez besoin.

navigator.appName

N�utilisez jamais navigator.appName. Pour cacher leur v�ritable identit�, beaucoup de navigateurs donnent � cette propri�t� les valeurs de Netscape ou MSIE. Tous les d�tecteurs de navigateurs bas�s sur navigator.appName seront faux.

D�m�ler le code d�identification du navigateur

Lire le code d�identification d�un navigateur n'est pas facile. Vous devez conna�tre les nombreux pi�ges que les fournisseurs de navigateurs ont, sciemment ou inconsciemment, pr�par�s.

Le navigateur

D'abord nous avons besoins de savoir comment ce construit ce code d�identification. Le code commence presque toujours par Mozilla. C'est le nom du vieux moteur Netscape, celui qui a form� le noyau de Netscape 1 � 4.

Quand Netscape 1 �tait le dernier et le plus grand navigateur, il employait Mozilla en tant que nom et identification. A ce moment l�, il �tait le seul navigateur � supporter les cookies et les autres nouveaut�s tel que <CENTER>, beaucoup de d�veloppeur web ont �crit des d�tecteurs de navigateurs pour rechercher le code d�identification Mozilla dans le navigateur afin d�envoyer les utilisateurs de Netscape 1 sur des pages avanc�es et laisser les utilisateurs d'autres navigateurs (mosa�que, Lynx) sur de simples pages.

Mozilla afin d��tre eux aussi d�tectable par les d�tecteurs de navigateurs. Jusqu�� aujourd�hui, c�est rest� une habitude, bien que ce ne soit plus n�cessaire.

Une fois de plus, nous voyons que l'utilisation d�un d�tecteur de navigateur force les navigateurs � s'identifier eux-m�mes diff�remment (incorrectement, si vous pr�f�rez).

Les autres fournisseurs de navigateurs mettent g�n�ralement le vrai nom de leur navigateur dans le code d�identification, MSIE ou Opera etc... .Ils ont �galement rajout� compatible apr�s le num�ro de version de Mozilla, pour indiquer qu'ils n'�taient pas vraiment Mozilla mais seulement compatible avec celui-ci. Cette fa�on de faire est �galement devenue une habitude.

D'autre part, jusqu'� Mozilla Netscape n�a jamais ajout� Netscape � ce code d�identification. Par cons�quent il n'y a pas vraiment de fa�on de d�tecter Netscape 4 ou les versions inf�rieur. Si ce n'est aucun autre navigateur et s'il n�y a pas compatible dans le code d�identification, nous pouvons assumer que c'est un Netscape 1 � 4.

Donc pour d�tecter un navigateur, nous recherchons les bons codes d�identifications (ou leurs absence).

La version

Apr�s Mozilla viens un slash puis le num�ro de version. Dans Netscape avant la version 6 le num�ro de version est identique � la version du navigateur actuel, mais d'autres fournisseurs (notamment Microsoft) n'ont pas �t� contraints par ceci. Au lieu de cela, ils ont choisi le num�ro de version de Mozilla dont ils se sentaient le plus compatibles.

Tous les fournisseurs de navigateurs except� Netscape ont pris l�habitude d�inclure le vrai num�ro de version derri�re le vrai nom de leur navigateur, s�par� par un espace ou un slash. Ainsi une fois que nous avons identifi� le nom du navigateur, nous recherchons le deuxi�me caract�re qui est la version du navigateur.

Pour Netscape, nous prenons le num�ro qui ce trouve derri�re Mozilla/ � la place. C'est correct pour tout les Netscapes jusqu'� la version 6. Malheureusement Mozilla ne suit aucune r�gle. Si le num�ro de version de Mozilla est 5 (ce qui est correct, puisque le '6' n�est qu�une astuces commerciale), mais le nom du navigateur est de la forme Netscape6/6.0 , ne suivant pas la r�gle que j'ai �nonc�e plus haut. J'ai donc d�cid� de ne rien faire � ce sujet, Mozilla est d�tect� en tant que 'Netscape 5 '.

Syst�me d'exploitation

La d�tection d'OS est assez simple, � partir du moment ou vous savez comment elle fonctionne. Internet Explorateur dit Windows, tandis que Netscape indique Win, par cons�quent d�tectez toujours Windows en recherchant Win. Il n�est donc pas �tonnamment, que le code Mac l�emploie de l'OS Macintosh. Si vous trouvez X11 signifie que l'ordinateur utilise X-Windows pour Unix, si en plus le code Linux est trouv� l'OS est Linux.

Le script

Vous d�tectez quel navigateur est utilis� par le script suivant :

var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS)
{
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac"
	else if (checkIt('win')) OS = "Windows"
	else OS = "an unknown operating system";
}

function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

Explication

Nous commen�ons par prendre navigator.userAgent et on met toute la cha�ne de caract�res en minuscule (toLowerCase) (de sorte qu�il fonctionne aussi si les navigateurs buguent avec les majuscules).

var detect = navigator.userAgent.toLowerCase();

J'emploie une fonction d'aide, checkIt(). C'est la fonction qui fait la v�ritable d�tection pour la cha�ne de caract�res. Elle renvoie le num�ro d'index du nom de navigateur dans la cha�ne. Si le nom n'est pas dans celle-ci, elle renvoie z�ro.

Elle se rappelle �galement de place (la place du nom du navigateur dans la cha�ne) et de thestring. La fonction est seulement ex�cut�e � partir du moment ou nous avons trouv� le bon navigateur. Apr�s �a, la fonction n�est plus appel�e donc place et thestring gardent la valeur qu'ils ont eue en d�tectant le navigateur. Voir ci-dessous pour les d�tails.

function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

La d�tection de navigateur

L�astuce de ce script, c�est qu�il commence par les navigateurs les plus rares pour finir par les plus communs. Comme nous avons pu le voir Opera peut assumer l'identit� d�Internet Explorer, mais il laisse toujours Opera quelque part dans le code d�identification. Par cons�quent nous devons d'abord contr�ler si le navigateur est Opera, et c�est seulement s'il ne l�est pas que nous cherchons � voir si c'est Internet Explorer. Cet ordre de d�tection est tr�s important.

Ainsi nous commen�ons par les navigateurs exotiques. Konqueror en premier.

if (checkIt('konqueror'))
{

Ce qui vient apr�s le if est seulement ex�cut� quand le nom Konqueror appara�t dans le code du navigateur. Si c�est le cas, le navigateur est Konqueror et l'OS est Linux, bien que le code d�identification du navigateur puisse ne pas contenir de r�f�rence pour cet OS.

	browser = "Konqueror";
	OS = "Linux";
}

Vient maintenant une longue liste de else if. Nous commen�ons encore par les navigateurs les plus rares.

else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"

Si le navigateur n'est aucun de ce qui pr�c�de, nous pouvons sans risque v�rifier si c�est Explorer.

else if (checkIt('msie')) browser = "Internet Explorer"

Maintenant pour Netscape. Nous v�rifions si la cha�ne 'compatible' n'est PAS presente. Si elle n'est pas pr�sente, le navigateur est probablement Netscape. En outre, le num�ro de version est toujours situ� � la neuvi�me place dans le code du navigateur (index 8, derri�re Mozilla/), ainsi nous pouvons imm�diatement d�tectez le num�ro de version.

else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}

Si ce n'est toujours pas le navigateur, alors je ne sais pas.

else browser = "An unknown browser";

Naturellement vous pouvez facilement rajouter d'autres navigateurs � la liste else if. Rappelez-vous juste qu�il faut d�abord v�rifier les navigateurs les plus rares.

D�tecter la version

Maintenant pour la version. S'il n'y a pas encore de version d�tect� (si le navigateur n'est pas Netscape)

if (!version)

nous prenons le caract�re derri�re le nom du navigateur, en utilisant place et thestring que la fonction checkIt() nous a pr�par�.

version = detect.charAt(place + thestring.length);

D�tecter l�OS

Si un OS n'est pas encore d�tect�

if (!OS)
{

nous commen�ons une nouvelle liste de else if :

	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac"
	else if (checkIt('win')) OS = "Windows"
	else OS = "an unknown operating system";
}

qui nous donne le syst�me d'exploitation.

Utiliser le

Maintenant vous avez assez d'information pour prendre des d�cisions bas�es sur le navigateur de l'utilisateur. Par exemple :

if (browser != "Internet Explorer")
{
	code not executed in Explorer
}

ou

if (version < 4 || browser == "iCab")
{
	code executed in browser versions 3 and below and iCab
}

Ne pas utiliser la d�tection de navigateur

Maintenant que vous savez comment d�tecter les navigateurs, vous devez apprendre quand utiliser la d�tection de navigateur et quand il faut utiliser une autre m�thode de d�tection. Beaucoup de novices sous estime l�importance d�un d�tecteur de navigateur.

La raison la plus commune d�utilisation d�un d�tecteur de navigateur, c�est d�emp�cher certains scripts d��tre ex�cut� dans des navigateurs ou ils ne seront pas pris en charge. Cependant, utiliser un d�tecteur de navigateur pour la d�tection d�objet n�est pas sans risques puisque vous ne pourrez jamais �tre sur que la d�tection de navigateur couvrira toutes les circonstances.

La m�thode la plus sure est d�utiliser la d�tection d'objet: cette m�thode regarde si le navigateur peut supporter la m�thode ou l�objet JavaScript que vous souhaitez utiliser. Utilisez le script de cette page seulement quand la d�tection d�objet est impossible.


Cours JavaScript : Introduction Javascript Ajouter du Javascript D�tection d'objet D�clarations Fontions String DOM Bool�en DOM interm�diaire Objets This MouseOver Imprimer D�tection navigateur