Pergunta

As tags CDATA são necessárias em tags de script e, em caso afirmativo, quando?

Em outras palavras, quando e onde é isso:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

preferível a isto:

<script type="text/javascript">
...code...
</script>
Foi útil?

Solução

Uma seção CDATA é necessária se você precisar que seu documento seja analisado como XML (por exemplo,quando uma página XHTML é interpretada como XML) e você quer ser capaz de escrever literalmente i<10 e a && b em vez de i&lt;10 e a &amp;&amp; b, já que o XHTML analisará o código JavaScript como dados de caracteres analisados, em oposição aos dados de caracteres por padrão.Isso não é um problema com scripts armazenados em arquivos de origem externos, mas para qualquer JavaScript embutido em XHTML você provavelmente deseja usar uma seção CDATA.

Observe que muitas páginas XHTML nunca foram analisadas como XML e, nesse caso, isso não será um problema.

Para um bom artigo sobre o assunto, veja https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

Outras dicas

Quando os navegadores tratam a marcação como XML:

<script>
<![CDATA[
    ...code...
]]>
</script>

Quando os navegadores tratam a marcação como HTML:

<script>
    ...code...
</script>

Quando os navegadores tratam a marcação como HTML e você deseja que sua marcação XHTML 1.0 (por exemplo) seja validada.

<script>
//<![CDATA[
    ...code...
//]]>
</script>

HTML

Um analisador HTML tratará tudo entre <script> e </script> como parte do roteiro. Algumas implementações nem precisam de uma tag de fechamento correta;eles param a interpretação do roteiro em "</", o que está correto de acordo com o especificações.

Atualizar No HTML5, e nos navegadores atuais, esse não é mais o caso.

Então, em HTML, isso é não possível:

<script>
var x = '</script>';
alert(x)
</script>

A CDATA seção tem nenhum efeito.É por isso que você precisa escrever

var x = '<' + '/script>'; // or
var x = '<\/script>';

ou similar.

Isto também se aplica a arquivos XHTML servidos como text/html.(Como o IE não oferece suporte a tipos de conteúdo XML, isso é verdade.)

XML

Em XML, aplicam-se regras diferentes.Observe que os navegadores (não IE) só usam um analisador XML se o documento XHMTL for servido com um tipo de conteúdo XML.

Para o analisador XML, um script tag não é melhor do que qualquer outra tag.Particularmente, um nó de script pode conter nós filhos não textuais, acionados por "<";e um "&"sinal denota uma entidade de personagem.

Então, em XHTML, isso é não possível:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

Para contornar isso, você pode agrupar todo o script em um CDATA seção.Isso diz ao analisador:'Nesta secção, não trate"<" e "&"como caracteres de controle. ' Para impedir que o mecanismo JavaScript interprete o "<![CDATA[" e "]]>"marcas, você pode envolvê-las em comentários.

Se o seu script não contiver nenhum "<" ou "&", você não precisa de um CDATA seção de qualquer maneira.

Basicamente é permitir escrever um documento que seja ao mesmo tempo XHTML e HTML.O problema é que dentro do XHTML, o analisador XML interpretará os caracteres &,<,> no roteiro tag e causar erro de análise XML.Então, você pode escrever seu JavaScript com entidades, por exemplo:

if (a &gt; b) alert('hello world');

Mas isso é impraticável.O maior problema é que se você ler a página em HTML, a tag roteiro é considerado CDATA 'por padrão' e esse JavaScript não será executado.Portanto, se você deseja que a mesma página esteja OK usando analisadores XHTML e HTML, você precisa colocar o roteiro tag no elemento CDATA em XHTML, mas NÃO para incluí-la em HTML.

Este truque marca o início de um elemento CDATA como um comentário JavaScript;em HTML, o analisador JavaScript ignora a tag CDATA (é um comentário).Em XHTML, o analisador XML (que é executado antes do JavaScript) o detecta e trata o restante até o final do CDATA como CDATA.

É uma coisa X(HT)ML.Quando você usa símbolos como < e > dentro do JavaScript, por ex.para comparar dois números inteiros, isso teria que ser analisado como XML, portanto, eles seriam marcados como início ou fim de uma tag.

O CDATA significa que as seguintes linhas (tudo até o ]]> não é XML e, portanto, não deve ser analisado dessa forma.

Fazer não use CDATA em HTML4, mas você deve use CDATA em XHTML e deve use CDATA em XML se você tiver símbolos sem escape como < e >.

É para garantir que a validação XHTML funcione corretamente quando você tiver JavaScript incorporado em sua página, em vez de referenciado externamente.

XHTML exige que sua página esteja estritamente em conformidade com os requisitos de marcação XML.Como o JavaScript pode conter caracteres com significado especial, você deve envolvê-lo em CDATA para garantir que a validação não o sinalize como malformado.

Com páginas HTML na web, você pode apenas incluir o JavaScript necessário entre as tags e.Quando você valida o HTML em sua página web, o conteúdo JavaScript é considerado CDATA (dados de caracteres) e, portanto, ignorado pelo validador.O mesmo não acontece se você seguir os padrões XHTML mais recentes na configuração de sua página web.Com XHTML o código entre as tags de script é considerado PCDATA (dados de caracteres analisados) que são, portanto, processados ​​pelo validador.

Por causa disso, você não pode simplesmente incluir JavaScript entre as tags de script da sua página sem 'quebrar' a sua página da web (pelo menos no que diz respeito ao validador).

Você pode aprender mais sobre CDATA aqui, e mais sobre XHTML aqui.

CDATA indica que o conteúdo contido não é XML.

Aqui está uma explicação sobre Wikipédia

Quando você busca conformidade estrita com XHTML, você precisa do CDATA para que menos que e e comercial não sejam sinalizados como caracteres inválidos.

para evitar erros de xml durante a validação de xhtml.

CDATA diz ao navegador para exibir o texto como está e não renderizá-lo como HTML.

CDATA indica que o conteúdo contido não é XML.

CDATA é necessário em qualquer dialeto XML, porque o texto dentro de um nó XML é tratado como um elemento filho antes de ser avaliado como JavaScript.Esta é também a razão pela qual JSLint reclama sobre a < caractere em regexes.

Referências

Quando você quiser validar (em XML/XHTML - obrigado, Loren Segal).

Dessa forma, o navegador mais antigo não analisa o código Javascript e a página não quebra.

Compatibilidade com versões anteriores.Tem que amar isto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top