Comentário condicional - Conditional comment
Os comentários condicionais são declarações condicionais interpretadas pelo Microsoft Internet Explorer versões 5 a 9 no código-fonte HTML . Eles podem ser usados para fornecer e ocultar códigos de e para essas versões do Internet Explorer. Comentários condicionais não são suportados no Internet Explorer 10 e 11 .
Os comentários condicionais em HTML apareceram pela primeira vez no navegador Internet Explorer 5 da Microsoft, embora o suporte agora tenha sido preterido. No Internet Explorer 10, comentários condicionais HTML não são suportados quando a página está no modo padrão (modo de documento 10). Os comentários condicionais do JScript foram introduzidos no Internet Explorer 4 e continuaram a ter suporte no Internet Explorer 10, no modo de padrões ou no modo de compatibilidade.
Exemplos
Aqui está um exemplo simples que demonstra como funcionam os comentários condicionais.
<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
Sintaxe
Existem dois tipos de "comentários condicionais": nível inferior revelado e nível inferior oculto .
A sintaxe básica de cada tipo de comentário é mostrada na tabela a seguir. O primeiro comentário mostrado é o Comentário HTML básico, que é incluído para fins de comparação e para ilustrar a sintaxe diferente usada por cada tipo de comentário condicional.
| Tipo de comentário | Sintaxe ou valor possível |
|---|---|
| comentário HTML padrão | <! - Conteúdo do comentário -> |
| nível inferior oculto | <! - [if expression ]> HTML <! [endif] -> |
| revelado em nível inferior | <! [if expression ]> HTML <! [endif]> |
O HTML mostrado dentro do bloco de sintaxe em cada um dos comentários condicionais denota qualquer bloco de conteúdo HTML, incluindo script. Ambos os tipos de comentário condicional usam uma expressão condicional para indicar se o conteúdo dentro do bloco de comentário deve ser analisado ou ignorado. A expressão condicional é formada a partir de uma combinação de recurso, operador e / ou valor, dependendo do recurso. A tabela a seguir mostra os recursos com suporte e descreve os valores que cada recurso oferece.
| Item | Exemplo | Comente |
|---|---|---|
| IE | [se IE] | A string "IE" é um recurso correspondente à versão do Internet Explorer usada para visualizar a página da web. |
| valor | [se IE 7] | Um número inteiro ou de ponto flutuante correspondente à versão do navegador. Retorna um valor booleano true se o número da versão corresponder à versão do navegador. Para obter mais informações, consulte Vetores de versão . |
| WindowsEdition | [se WindowsEdition] | Internet Explorer 8 no Windows 7. A string "WindowsEdition" é um recurso correspondente à edição do Microsoft Windows usada para visualizar a página da web. |
| valor | [se WindowsEdition 1] | Um número inteiro correspondente à edição do Windows usada para visualizar a página da web. Retorna um valor booleano true se o valor corresponder à edição que está sendo usada. Para obter informações sobre os valores com suporte e as edições que eles descrevem, consulte o parâmetro pdwReturnedProductType da função GetProductInfo. |
| verdadeiro | [se for verdade] | Sempre avalia como verdadeiro. |
| falso | [se falso] | Sempre avalia como falso. |
A tabela a seguir descreve os operadores que podem ser usados para criar expressões condicionais.
| Item | Exemplo | Comente |
|---|---|---|
| ! | [if! IE] | O operador NOT. Isso é colocado imediatamente na frente do recurso , operador ou subexpressão para reverter o significado booleano da expressão. |
| lt | [se for IE 5.5] | O operador inferior. Retorna verdadeiro se o primeiro argumento for menor que o segundo argumento. |
| lte | [se lte IE 6] | O operador menor ou igual. Retorna verdadeiro se o primeiro argumento for menor ou igual ao segundo argumento. |
| gt | [se gt IE 5] | O maior operador. Retorna verdadeiro se o primeiro argumento for maior que o segundo argumento. |
| gte | [se gte IE 7] | O operador maior ou igual. Retorna verdadeiro se o primeiro argumento for maior ou igual ao segundo argumento. |
| () | [if! (IE 7)] | Operadores de subexpressão. Usado em conjunto com operadores booleanos para criar expressões mais complexas. |
| E | [if (gt IE 5) & (lt IE 7)] | O operador AND. Retorna verdadeiro se todas as subexpressões forem avaliadas como verdadeiras |
| | | [if (IE 6) | (IE 7)] | O operador OR. Retorna verdadeiro se qualquer uma das subexpressões for avaliada como verdadeira. |
Abaixo estão dois exemplos de um comentário condicional "oculto de nível inferior":
<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->
ou
<!--[if lte IE 7]>
<style type="text/css">
/* CSS here */
</style>
<![endif]-->
A diretiva no primeiro exemplo permitirá que o IE 8 leia o arquivo CSS especificado, enquanto o IE 7 ou versões anteriores do IE irão ignorá-lo. Navegadores diferentes do IE também irão ignorá-lo porque se parece com um comentário HTML padrão. A tag no segundo exemplo permitirá que as versões 5.0 a 7 do IE leiam o estilo CSS interno. Com diferentes usos dessa tag, você também pode destacar o IE 6, o IE 5 ou as versões do IE que são mais recentes (maiores) ou mais antigas (menores) do que uma versão especificada.
Comentário condicional revelado em nível inferior
Abaixo está um exemplo de um 'comentário' condicional "revelado em nível inferior", que não é um comentário (X) HTML , apesar do nome enganoso, usando a sintaxe padrão da Microsoft:
<![if !IE]>
<link href="non-ie.css" rel="stylesheet">
<![endif]>
Este exemplo mostra o conteúdo que deve ser exposto apenas a navegadores não IE, pois a condição é avaliada como "falsa" no IE (e, portanto, o conteúdo é ignorado), enquanto as próprias marcas não são reconhecidas (e, portanto, são ignoradas) em navegadores não IE . Este não é um HTML ou XHTML válido.
A Microsoft reconhece que essa sintaxe não é uma marcação padronizada, com a intenção de que essas marcas sejam ignoradas por outros navegadores e exponham o conteúdo no meio. Para garantir a conformidade com os padrões W3C, alguns desenvolvedores da web usam uma técnica alternativa para comentários condicionais revelados em nível inferior:
<!--[if !IE]>-->
<link href="non-ie.css" rel="stylesheet">
<!--<![endif]-->
Embora um tanto confusa na estrutura, esta sintaxe específica é válida (X) HTML e é útil para seções condicionais destinadas especificamente a navegadores não-IE; se a condição for avaliada como verdadeira (por exemplo, se escrever código destinado a ser exibido em navegadores não-IE e em algumas versões do IE), o IE exibirá o "->" presente antes do conteúdo HTML. Este problema é facilmente resolvido adicionando "<!" à inicial "->" da seguinte forma:
<!--[if gt IE 6]><!-->
This code displays on non-IE browsers and on IE 7 or higher.
<!--<![endif]-->
O extra "<!" é ignorado por navegadores não-IE; ele também é ignorado pelo IE, independentemente da condição, porque se for falso , tudo dentro do comentário condicional será ignorado e, se for verdadeiro , a marca resultante <!--> não será reconhecida e, portanto, ignorada.
Comentários condicionais em JScript
A partir do Internet Explorer 4, existe um mecanismo proprietário semelhante para adicionar comentários condicionais ao JScript , conhecido como compilação condicional.
Exemplos de código:
<script>
/*@cc_on
document.write("You are using IE4 or higher");
@*/
</script>
Havia também várias variáveis predefinidas, embora não possamos mais confiar nelas, pois a Microsoft alterou o mecanismo JScript do IE6 com XP SP3 e agora relata como:
@_jscript_version == 5.7
Como resultado, uma possível maneira de detectar a versão do Internet Explorer usando compilação condicional pode ser vista abaixo:
<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>
No entanto, a compilação condicional não é mais compatível com o modo de padrões do Internet Explorer 11 .