Comentario condicional - Conditional comment

Los comentarios condicionales son declaraciones condicionales interpretadas por las versiones 5 a 9 de Microsoft Internet Explorer en código fuente HTML . Se pueden utilizar para proporcionar y ocultar código desde y hacia estas versiones de Internet Explorer. Los comentarios condicionales no son compatibles con Internet Explorer 10 y 11 .

Los comentarios condicionales en HTML aparecieron por primera vez en el navegador Internet Explorer 5 de Microsoft, aunque ahora se ha desaprobado el soporte. En Internet Explorer 10, los comentarios condicionales HTML no son compatibles cuando la página está en modo estándar (modo de documento 10). Los comentarios condicionales de JScript se introdujeron en Internet Explorer 4 y continuaron siendo compatibles con Internet Explorer 10, en modo estándar o modo de compatibilidad.

Ejemplos de

Aquí hay un ejemplo simple que demuestra cómo funcionan los comentarios condicionales.

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

Sintaxis

Hay dos tipos de "comentarios condicionales": revelados en el nivel inferior y ocultos en el nivel inferior .

La sintaxis básica de cada tipo de comentario se muestra en la siguiente tabla. El primer comentario que se muestra es el comentario HTML básico, que se incluye con el propósito de comparar e ilustrar las diferentes sintaxis utilizadas por cada tipo de comentario condicional.

Tipo de comentario Sintaxis o valor posible
comentario HTML estándar <! - Contenido del comentario ->
oculto en el nivel inferior <! - [if expresión ]> HTML <! [endif] ->
revelado a nivel inferior <! [if expresión ]> HTML <! [endif]>

El HTML que se muestra dentro del bloque de sintaxis en cada uno de los comentarios condicionales denota cualquier bloque de contenido HTML, incluido el script. Ambos tipos de comentario condicional usan una expresión condicional para indicar si el contenido dentro del bloque de comentarios debe ser analizado o ignorado. La expresión condicional se forma a partir de una combinación de característica, operador y / o valor, según la característica. La siguiente tabla muestra las funciones compatibles y describe los valores que admite cada función.

Artículo Ejemplo Comentario
ES DECIR [si es IE] La cadena "IE" es una característica correspondiente a la versión de Internet Explorer utilizada para ver la página web.
valor [si IE 7] Un número entero o de punto flotante correspondiente a la versión del navegador. Devuelve un valor booleano verdadero si el número de versión coincide con la versión del navegador. Para obtener más información, consulte Vectores de versión .
WindowsEdition [si WindowsEdition] Internet Explorer 8 en Windows 7. La cadena "WindowsEdition" es una característica correspondiente a la edición de Microsoft Windows utilizada para ver la página web.
valor [si WindowsEdition 1] Un número entero correspondiente a la edición de Windows utilizada para ver la página web. Devuelve un valor booleano verdadero si el valor coincide con la edición que se está utilizando. Para obtener información sobre los valores admitidos y las ediciones que describen, consulte el parámetro pdwReturnedProductType de la función GetProductInfo.
cierto [si es verdad] Siempre se evalúa como verdadero.
falso [si es falso] Siempre se evalúa como falso.

La siguiente tabla describe los operadores que se pueden utilizar para crear expresiones condicionales.

Artículo Ejemplo Comentario
! [si! IE] El operador NOT. Se coloca inmediatamente delante de la característica , el operador o la subexpresión para invertir el significado booleano de la expresión.
es [si es IE 5.5] El operador menor que. Devuelve verdadero si el primer argumento es menor que el segundo.
lte [si es lte IE 6] El operador menor o igual. Devuelve verdadero si el primer argumento es menor o igual que el segundo argumento.
gt [si gt IE 5] El operador mayor que. Devuelve verdadero si el primer argumento es mayor que el segundo argumento.
gte [si es gte IE 7] El operador mayor o igual que. Devuelve verdadero si el primer argumento es mayor o igual que el segundo argumento.
() [si! (IE 7)] Operadores de subexpresión. Se usa junto con operadores booleanos para crear expresiones más complejas.
Y [si (gt IE 5) y (lt IE 7)] El operador AND. Devuelve verdadero si todas las subexpresiones se evalúan como verdaderas
| [si (IE 6) | (IE 7)] El operador OR. Devuelve verdadero si alguna de las subexpresiones se evalúa como verdadera.

Comentario condicional oculto a nivel inferior

A continuación, se muestran dos ejemplos de un comentario condicional "oculto a nivel inferior":

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

o

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

La directiva del primer ejemplo permitirá que IE 8 lea el archivo CSS especificado, mientras que IE 7 o versiones anteriores de IE lo ignorarán. Los navegadores que no sean IE también lo ignorarán porque parece un comentario HTML estándar. La etiqueta del segundo ejemplo permitirá que las versiones de IE 5.0 a 7 lean el estilo CSS interno. Con diferentes usos de esta etiqueta, también puede seleccionar IE 6, IE 5 o versiones de IE que son más nuevas (mayores) o más antiguas (menos) que una versión especificada.

Comentario condicional revelado de nivel inferior

A continuación se muestra un ejemplo de un 'comentario' condicional "revelado de nivel inferior", que no es un comentario HTML (X) en absoluto, a pesar del nombre engañoso, utilizando la sintaxis predeterminada de Microsoft:

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

Este ejemplo muestra contenido que debe exponerse solo a navegadores que no son de IE, ya que la condición se evalúa como "falsa" en IE (y, por lo tanto, el contenido se ignora), mientras que las etiquetas en sí no se reconocen (y, por lo tanto, se ignoran) en los navegadores que no son de IE. . Esto no es HTML o XHTML válido.

Microsoft reconoce que esta sintaxis no es un marcado estandarizado, con la intención de que otros navegadores pasen por alto estas etiquetas y expongan el contenido en el medio. Para garantizar el cumplimiento de los estándares del W3C, algunos desarrolladores web utilizan una técnica alternativa para los comentarios condicionales revelados de nivel inferior:

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

Si bien su estructura es algo confusa, esta sintaxis específica es HTML (X) válido y es útil para secciones condicionales diseñadas específicamente para navegadores que no son IE; si la condición se evalúa como verdadera (por ejemplo, si se escribe código destinado a mostrarse en navegadores que no son IE y en algunas versiones de IE), IE mostrará el "->" presente antes del contenido HTML. Este problema se resuelve fácilmente anteponiendo "<!" al inicial "->" de la siguiente manera:

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

El extra "<!" es ignorado por navegadores que no son IE; IE también lo ignora independientemente de la condición porque si es falso , todo lo que esté dentro del comentario condicional se ignora y, si es verdadero , la etiqueta resultante <!--> no se reconoce y, por lo tanto, se ignora.

Comentarios condicionales en JScript

A partir de Internet Explorer 4, existe un mecanismo propietario similar para agregar comentarios condicionales dentro de JScript , conocido como compilación condicional.

Ejemplos de código:

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

También había varias variables predefinidas, aunque ya no se puede confiar en ellas ya que Microsoft alteró el motor JScript de IE6 con XP SP3 y ahora informa como:

@_jscript_version == 5.7

Como resultado, a continuación se puede ver una forma posible de detectar la versión de Internet Explorer mediante la compilación condicional:

<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>

Sin embargo, la compilación condicional ya no se admite en el modo estándar de Internet Explorer 11 .

Ver también

enlaces externos

Referencias