Compilation Conditionnelle JScript/JavaScript dans Internet Explorer

Internet Explorer, depuis sa version 4, intègre une fonctionnalité peu commune appelée compilation conditionnelle. Cette capacité permet aux développeurs de JScript et JavaScript de spécifier l'inclusion ou l'exclusion de certains blocs de code en fonction de conditions prédéfinies ou personnalisées. Il s'agit d'une méthode de détection de fonctionnalités robuste, comparable aux commentaires conditionnels HTML, mais appliquée directement au code script, et conçue pour maintenir la compatibilité avec les navigateurs non-IE.

Activation et Syntaxe de Base

L'activation de la compilation conditionnelle se fait via l'instruction @cc_on au début d'un bloc de script, ou par l'utilisation directe de déclarations comme @if ou @set. Voici un exemple illustratif montrant comment la compilation conditionnele peut cibler différentes versions de JScript et gérer les navigateurs alternatifs :

<script type="text/javascript">

/*@cc_on
    // Message affiché uniquement par IE
    document.write("Environnement JScript : version " + @_jscript_version + ".<br>");

    /*@if (@_jscript_version >= 5.7)
        document.write("JScript 5.7 ou version ultérieure détectée, avec support étendu des fonctionnalités.<br />");
        document.write("Ce texte apparaît uniquement pour IE avec JScript 5.7+ <br>");
    @else @*/
        // Ce bloc est visible par les navigateurs non-IE (Firefox, Chrome, etc.)
        // ou par les versions d'IE antérieures à JScript 5.7.
        document.write("Navigateur non-IE ou IE avec JScript < 5.7.<br>");
    /*@end
@*/

</script>

Dans cet exemple, si le script est exécuté par une version d'Internet Explorer, le premier document.write() affichera la version de JScript. Si la version de JScript est égale ou supérieure à 5.7, les deux lignes suivantes seront également compilées et affichées. Les autres navigateurs, ou les versions d'IE plus anciennes, verront uniquement la dernière ligne. L'astuce réside dans l'imbrication des commentaires multi-lignes (/* ... */) autour des blocs conditionnels pour assurer que les parties non destinées à être compilées par d'autres navigateurs sont simplement ignorées comme des commentaires.

Il est recommandé d'activer la compilation conditionnelle avec @cc_on en premier lieu. Cela garantit que les marqueurs de commentaire sont interprétés correctement par tous les navigateurs, comme démontré ci-dessus.

Déclarations Conditionnelles : @if, @elif, @else, @end

Les instructions principales pour la logique conditionnelle sont :

  • @if
  • @elif (équivalent à else if)
  • @else
  • @end (pour fermer un bloc conditionnel)

Logique Conditionnelle pour IE Seulement

Voici comment restreindre l'exécution d'un bloc de code spécifiquement à Internet Explorer, en fonction des propriétés du système d'exploitation :

/*@cc_on
   @if (@_win32)
      document.write("Ce navigateur Internet Explorer s'exécute sur un OS 32 bits.");
   @else
      document.write("Ce navigateur Internet Explorer ne s'exécute PAS sur un OS 32 bits.");
   @end
@*/

L'intégralité de ce script ne sera traitée que par Internet Explorer. D'autres navigateurs ignoreront ce bloc entièrement. Le message affiché dépendra ensuite de l'architecture du système d'exploitation.

Logique Conditionnelle Compatible avec d'Autres Navigateurs

En manipulant les balises de commentaire, il est possible de créer un bloc else qui sera exécuté par les navigateurs non-IE ou par IE si la condition initaile n'est pas remplei :

/*@cc_on
   /*@if (@_win32)
      document.write("IE détecté, exécutant sur un système d'exploitation 32 bits.");
   @else @*/
      document.write("Navigateur non-IE ou IE sur un système non-32 bits.");
   /*@end
@*/

Ici, le contenu suivant le @else @*/ sera interprété par les navigateurs qui ne supportent pas la compilation conditionnelle comme un code standard, tandis qu'IE l'interprétera dans le cadre de sa logique conditionnelle.

Structures @if, @elif, @else Complètes (IE Seulement)

Pour une gestion plus granulée des versions de JScript au sein d'Internet Explorer :

/*@cc_on
   @if (@_jscript_version >= 9)
      document.write("Navigateur Internet Explorer : JScript version 9.0 ou supérieure.");
   @elif (@_jscript_version >= 5.8)
      document.write("Navigateur Internet Explorer : JScript version 5.8 ou supérieure.");
   @else
      document.write("Navigateur Internet Explorer : Ancienne version de JScript (inférieure à 5.8).");
   @end
@*/

Structures @if, @elif, @else Complètes (Compatible avec d'Autres Navigateurs)

En étendant la technique des commentaires, le dernier bloc else peut être rendu visible par les navigateurs non-IE :

/*@cc_on
   /*@if (@_jscript_version >= 9)
      document.write("IE détecté : JScript 9.0 ou plus récent.");
   @elif (@_jscript_version >= 5.8)
      document.write("IE détecté : JScript 5.8 ou plus récent.");
   @else @*/
      document.write("Navigateur non-IE (la compilation conditionnelle n'est pas supportée).");
   /*@end
@*/

Avec cette approche, les navigateurs qui n'interprètent pas la compilation conditionnelle verront et exécuteront le dernier document.write() comme un script normal, assurant ainsi une forme de compatibilité descendante.

Étiquettes: jscript Internet Explorer Compilation Conditionnelle Détection de Fonctionnalités Développement Web

Publié le 1 juin à 22h35