HTML
Um analisador de HTML tratará tudo entre <script>
e </script>
como parte do script. Algumas implementações nem precisam de uma tag de fechamento correta; eles param a interpretação do script em " </
", o que é correto de acordo com as especificações .
Atualização No HTML5, e nos navegadores atuais, esse não é mais o caso.
Portanto, em HTML, isso não é possível:
<script>
var x = '</script>';
alert(x)
</script>
Uma CDATA
seção não tem efeito algum . É por isso que você precisa escrever
var x = '<' + '/script>'; // or
var x = '<\/script>';
ou similar.
Isso também se aplica aos arquivos XHTML servidos como text/html
. (Como o IE não suporta tipos de conteúdo XML, isso ocorre principalmente).
XML
No XML, regras diferentes se aplicam. Observe que navegadores (não IE) usam apenas um analisador XML se o documento XHMTL for servido com um tipo de conteúdo XML.
Para o analisador XML, uma script
marca não é melhor que qualquer outra marca. Particularmente, um nó de script pode conter nós filhos que não são de texto, acionados por " <
"; e um &
sinal " " indica uma entidade de caractere.
Portanto, em XHTML, isso não é possível:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Para contornar isso, você pode agrupar o script inteiro em uma CDATA
seção. Isso diz ao analisador: 'Nesta seção, não trate " <
" e " &
" como caracteres de controle .' Para impedir que o mecanismo JavaScript interprete as marcas " <![CDATA[
" e " ]]>
", você pode agrupá-las nos comentários.
Se o seu script não contiver " <
" ou " &
", você não precisará de uma CDATA
seção.