JDNet | Solutions | Emploi | Votre high-tech
 
Linternaute | Copainsdavant
Séminaires & Evénements | Etudes
   

Rechercher  

 
Sociétés Prestataires Carnet Formations Progiciels Encyclo Fonds Guide d'achat Comparateur Téléchargement Livres
Actualités
   2003
   2002
   2001
   Livres
Rubriques
   Java/J2EE
   PHP
   XML
   Client Web
   Technos .NET
   Flash
   Algo/Méthodes
   Outils

Dossiers
   Tous les dossiers

   PHP, Flash, SVG
   Perl / CGI - SSI
   Langages Web
   Services Web
   Sécurité
Ressources
   Interviews

   Téléchargement
   Composants
   Documentation
Contacts
   Rédaction
   Webmaster
© Benchmark Group

Détecter le navigateur en Javascript ? La bonne méthode
Derrière ce titre un peu présompteux se cache une astuce très simple, mais étonnamment peu utilisée, pour exécuter le bon code quel que soit le navigateur.

Tout développeur Javascript s'est trouvé confronté aux problèmes de compatibilité de son code avec les implémentations du langage dans les différents navigateurs. Le problème se posait plus particulièrement quand on considérait les importantes divergences entre Netscape et Internet Explorer.
Aujourd'hui, un grand nombre de ces divergences persistent malheureusement, et le marché des navigateurs s'est de plus considérablement enrichi de produits performants, comme Konqueror (sous Linux), Opéra, Mozilla ou encore Amaya, Galeon (sous Linux), etc.

Produire du code compatible impose donc, de plus en plus, d'adapter le script concerné en fonction du navigateur, quand la fonction que l'on désire mettre en place se programme différemment de l'un à l'autre.
Mais la méthode communément utilisée, qui repose sur la détection du navigateur à l'aide des variables navigator.appName & navigator.appVersion, pose plusieurs problèmes:

- d'abord, la méthode est lourde si l'on décide de prendre en compte un grand nombre de navigateurs (ce qui est pourtant nécessaire si l'on désire couvrir l'ensemble de ses visiteurs); de plus, certains navigateurs "cachent" leur identité, rendant leur détection par ce biais plus que problématique;

- ensuite, des navigateurs inconnus du programmeur, ou des navigateurs apparus après la production du code, ne seront pas couverts (le programmeur a certainement prévu un code "de rechange" pour tous les navigateurs non supportés, mais alors certains de ces derniers, qui implémentent pourtant la fonction Javascript pour laquelle une détection de navigateur est mise en place, ne tireront pas profit de cette fameuse fonction, et n'auront que le code de rechange à se mettre sous la dent);

- enfin, la méthode est source d'erreur en cas de mauvaise connaissance de la part du programmeur des implémentations exactes du langage.

Une méthode beaucoup plus rigoureuse, et qui constitue une solution aux trois problèmes précités, consiste à baser la détection non plus sur le nom et la version du navigateur, mais sur la méthode ou l'objet dont la compatibilité avec certains navigateurs n'est pas assurée, ou douteuse.

En clair, il s'agit de remplacer, par exemple, la portion de code suivante, hasardeuse dans ces effets:

if (navigator.appName=="Netscape")
  
sel = document.getSelection();
else if (navigator.appName=="Microsoft Internet Explorer")
  sel = document.selection.createRange().text;
else return;
alert("Votre sélection: "+sel);

(Démonstration: Sélectionner du texte et cliquer ici)

Par (code "propre" et fonctionnel):

if (document.getSelection) sel = document.getSelection();
else if (document.selection) sel = document.selection.createRange().text;
else return;
alert("Votre sélection: "+sel);


(Démonstration: Sélectionner du texte et cliquer ici)

Ici, nous contrôlons le support de la méthode getSelection() ou de l'objet selection, qui, selon les cas, sont exploités dans le code (ils permettent de récupérer du texte sélectionné par l'utilisateur sur la page).

Ce contrôle par objet, fort heureusement permis par Javascript, peut avoir bien d'autres utilités, notamment la détection du support du DHTML. Il suffit pour cela de contrôler une propriété typique du DHTML, et notamment de la manière suivante:

if (document.getElementById || document.all || document.layers) { ... }


Si l'un de ces trois objets ou méthodes est supportés par le navigateur, le code DHTML fonctionnera.

[Jérôme Morlon, 15 mai 2002 , JDNet]

Gratuit - Les nouveautés de
JDNet Développeurs
Toutes nos newsletters
 

Quel est le meilleur langage pour aborder la programmation ?
Basic (VB & co...)
C/C++
Java/C#
PHP
Pascal/Delphi
Perl
Python
autre...



Les outils de développement dans le Guide des Solutions
e-business

L'encyclopédie JDNet Toutes les notions pratiques, techniques et économiques relatives à l'e-business.
>> Accès à la rubrique "Développement"

Comparez les prix Matériel, PDA, modems...
Les bonnes affaires de la high-tech avec Kelkoo.
>> Comparateur

Société | Contacts | Publicité | Presse | Recrutement | Tous nos sites | Données personelles
Pour tout problème de consultations, écrivez au Webmaster.
© Benchmark Group, 4 rue diderot 92156 Suresnes Cedex