Commentaire conditionnel - Conditional comment

Les commentaires conditionnels sont des instructions conditionnelles interprétées par les versions 5 à 9 de Microsoft Internet Explorer dans le code source HTML . Ils peuvent être utilisés pour fournir et masquer du code vers et depuis ces versions d'Internet Explorer. Les commentaires conditionnels ne sont pas pris en charge dans Internet Explorer 10 et 11 .

Les commentaires conditionnels en HTML sont apparus pour la première fois dans le navigateur Internet Explorer 5 de Microsoft, bien que la prise en charge soit désormais obsolète. Dans Internet Explorer 10, les commentaires conditionnels HTML ne sont pas pris en charge lorsque la page est en mode standard (mode document 10). Les commentaires conditionnels JScript ont été introduits dans Internet Explorer 4 et ils ont continué à être pris en charge dans Internet Explorer 10, en mode standard ou en mode de compatibilité.

Exemples

Voici un exemple simple qui montre comment fonctionnent les commentaires conditionnels.

<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->

Syntaxe

Il existe deux types de «commentaires conditionnels»: le niveau inférieur révélé et le niveau inférieur masqué .

La syntaxe de base de chaque type de commentaire est indiquée dans le tableau suivant. Le premier commentaire affiché est le commentaire HTML de base, qui est inclus à des fins de comparaison et pour illustrer les différentes syntaxes utilisées par chaque type de commentaire conditionnel.

Type de commentaire Syntaxe ou valeur possible
commentaire HTML standard <! - Contenu du commentaire ->
caché au niveau inférieur <! - [si expression ]> HTML <! [endif] ->
révélée au niveau inférieur <! [if expression ]> HTML <! [endif]>

Le code HTML affiché à l'intérieur du bloc de syntaxe dans chacun des commentaires conditionnels désigne tout bloc de contenu HTML, y compris le script. Les deux types de commentaire conditionnel utilisent une expression conditionnelle pour indiquer si le contenu à l'intérieur du bloc de commentaire doit être analysé ou ignoré. L'expression conditionnelle est formée à partir d'une combinaison de caractéristique, d'opérateur et / ou de valeur, selon la caractéristique. Le tableau suivant présente les fonctionnalités prises en charge et décrit les valeurs prises en charge par chaque fonctionnalité.

Article Exemple Commenter
C'EST À DIRE [si IE] La chaîne «IE» est une fonctionnalité correspondant à la version d'Internet Explorer utilisée pour afficher la page Web.
valeur [si IE 7] Un nombre entier ou à virgule flottante correspondant à la version du navigateur. Renvoie une valeur booléenne true si le numéro de version correspond à la version du navigateur. Pour plus d'informations, consultez Vecteurs de version .
WindowsEdition [si WindowsEdition] Internet Explorer 8 sous Windows 7. La chaîne «WindowsEdition» est une fonctionnalité correspondant à l'édition de Microsoft Windows utilisée pour afficher la page Web.
valeur [si WindowsEdition 1] Un entier correspondant à l' édition de Windows utilisée pour afficher la page Web. Renvoie une valeur booléenne true si la valeur correspond à l'édition utilisée. Pour plus d'informations sur les valeurs prises en charge et les éditions qu'elles décrivent, consultez le paramètre pdwReturnedProductType de la fonction GetProductInfo.
vrai [si vrai] Évalue toujours vrai.
faux [si faux] Évalue toujours faux.

Le tableau suivant décrit les opérateurs pouvant être utilisés pour créer des expressions conditionnelles.

Article Exemple Commenter
! [si! IE] L'opérateur NOT. Il est placé immédiatement devant la fonction , l' opérateur ou la sous - expression pour inverser la signification booléenne de l'expression.
lt [si lt IE 5.5] L'opérateur moins que. Renvoie true si le premier argument est inférieur au deuxième argument.
lte [if lte IE 6] L'opérateur inférieur ou égal à. Renvoie true si le premier argument est inférieur ou égal au deuxième argument.
gt [si gt IE 5] L'opérateur supérieur à. Renvoie true si le premier argument est supérieur au deuxième argument.
gte [si gte IE 7] L'opérateur supérieur ou égal. Renvoie true si le premier argument est supérieur ou égal au deuxième argument.
() [si! (IE 7)] Opérateurs de sous-expression. Utilisé en conjonction avec des opérateurs booléens pour créer des expressions plus complexes.
& [if (gt IE 5) & (lt IE 7)] L'opérateur AND. Renvoie true si toutes les sous-expressions sont évaluées à true
| [si (IE 6) | (IE 7)] L'opérateur OR. Renvoie true si l'une des sous-expressions est évaluée à true.

Commentaire conditionnel masqué au niveau inférieur

Voici deux exemples de commentaire conditionnel "caché de bas niveau":

<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->

ou alors

<!--[if lte IE 7]>
<style type="text/css">
/* CSS here */
</style>
<![endif]-->

La directive du premier exemple permettra à IE 8 de lire le fichier CSS spécifié, tandis que IE 7 ou les versions antérieures d'IE l'ignoreront. Les navigateurs autres que IE l'ignoreront également car il ressemble à un commentaire HTML standard. La balise dans le deuxième exemple permettra aux versions IE 5.0 à 7 de lire le style CSS interne. Avec différentes utilisations de cette balise, vous pouvez également distinguer IE 6, IE 5 ou des versions d'IE qui sont plus récentes (supérieures) ou plus anciennes (moins) qu'une version spécifiée.

Commentaire conditionnel révélé au niveau inférieur

Vous trouverez ci-dessous un exemple de 'commentaire' conditionnel "révélé de niveau inférieur", qui n'est pas du tout un commentaire HTML (X) , malgré le nom trompeur, en utilisant la syntaxe Microsoft par défaut:

<![if !IE]>
<link href="non-ie.css" rel="stylesheet">
<![endif]>

Cet exemple montre le contenu qui ne doit être exposé qu'aux navigateurs non-IE, car la condition est évaluée à «faux» sur IE (et donc le contenu est ignoré), tandis que les balises elles-mêmes ne sont pas reconnues (et donc ignorées) sur les navigateurs non-IE . Ce n'est pas du HTML ou du XHTML valide.

Microsoft reconnaît que cette syntaxe n'est pas un balisage normalisé, l'intention que ces balises soient ignorées par les autres navigateurs et exposent le contenu au milieu. Afin de garantir la conformité aux normes du W3C, certains développeurs Web utilisent une technique alternative pour les commentaires conditionnels révélés de bas niveau:

<!--[if !IE]>-->
<link href="non-ie.css" rel="stylesheet">
<!--<![endif]-->

Bien que quelque peu déroutante dans sa structure, cette syntaxe spécifique est du HTML (X) valide et est utile pour les sections conditionnelles destinées spécifiquement aux navigateurs non-IE; si la condition est évaluée à vrai (par exemple, si l'écriture de code est censée s'afficher sur des navigateurs non-IE et sur certaines versions d'IE), IE affichera alors le "->" présent avant le contenu HTML. Ce problème est facilement résolu en ajoutant "<!" à l'initiale "->" comme suit:

<!--[if gt IE 6]><!-->
This code displays on non-IE browsers and on IE 7 or higher.
<!--<![endif]-->

Le supplément "<!" est ignoré par les navigateurs non-IE; il est également ignoré par IE quelle que soit la condition car s'il est faux , tout ce qui se trouve dans le commentaire conditionnel est ignoré, et s'il est vrai , la balise résultante <!--> n'est pas reconnue et donc ignorée.

Commentaires conditionnels dans JScript

À partir d'Internet Explorer 4, il existe un mécanisme propriétaire similaire pour ajouter des commentaires conditionnels dans JScript , appelé compilation conditionnelle.

Exemples de code:

<script>
/*@cc_on
  document.write("You are using IE4 or higher");
@*/
</script>

Il y avait également plusieurs variables prédéfinies, bien que celles-ci ne puissent plus être invoquées car Microsoft a modifié le moteur JScript d'IE6 avec XP SP3 et il indique désormais:

@_jscript_version == 5.7

En conséquence, un moyen possible de détecter la version d'Internet Explorer à l'aide de la compilation conditionnelle peut être vu ci-dessous:

<script>
/*@cc_on

  @if (@_jscript_version == 11)
    document.write("You are using IE11 with an older document mode");
  @elif (@_jscript_version == 10)
    document.write("You are using IE10");
  @elif (@_jscript_version == 9)
    document.write("You are using IE9");
  @elif (@_jscript_version == 5.8)
    document.write("You are using IE8");
  @elif (@_jscript_version == 5.7)
    document.write("You are using IE" + (!window.XMLHttpRequest ? 6 : 7));
  @elif (@_jscript_version == 5.6)
    document.write("You are using IE6");
  @elif (@_jscript_version == 5.5)
    document.write("You are using IE5.5");
  @elif (@_jscript_version < 5.5)
    document.write("You are using a version older than IE5.5");
  @else
    document.write("You are using an unknown version of IE");
  @end
 
@*/
</script>

Cependant, la compilation conditionnelle n'est plus prise en charge en mode Normes d' Internet Explorer 11 .

Voir également

Liens externes

Les références