Javascript: Validação dentro do XHTML com CDATA

Palavras-chave: Javascript, HTML, XHTML, SVG, XML, CDATA, válido, validator

Você mudou suas páginas de HTML para XHTML e agora elas não validam mais por causa do Javascript. O que acontece?

No HTML, todo o conteúdo da tag <script> é considerado texto normal (CDATA – Character Data) e é simplesmente ignorado pelo parser HTML. Nenhum < ou & que for usado no Javascript vai ser considerado início de tag ou de entidade.

Já no XHTML e outros formatos derivados do XML como o SVG, a tag <script> é uma tag como outra qualquer, que pode ter outras tags dentro dela. Seu conteúdo é analisado pelo parser. Por isso qualquer < encontrado no Javascript vai ser interpretado como início de tag e vai dar erro.

Tudo o que você precisa fazer, é dizer ao parser que o seu Javascript é CDATA, ou seja, texto normal que não deve ser interpretado como XML. Tem uma tag especial para isso:

<![CDATA[  ...  ]]>

Tudo o que estiver dentro dessa tag feia vai ser protegido. Então basta colocar todo seu código dentro dela:

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

alert("Funcionou!")

// ]]>
</script>

Note que as tags de início e fim do CDATA foram comentadas, assim evita-se o problema de o Javascript tentar interpretá-las também.

This entry was posted in JavaScript. Bookmark the permalink.

5 Responses to Javascript: Validação dentro do XHTML com CDATA

  1. Julio says:

    Nossa! Valeu. tava passando um sufoco aqui.

  2. Raphael DDL says:

    Opa, muito obrigado!
    No W3C ensina o uso do CDATA mas mesmo assim ele tava dando fail no Markup Validation… Eles nao ensinam que tem que colocar os // para ficar como comment.

    Agora validou. Obrigado amigo!
    O texto é velho (2006) mas o conteúdo ajuda muito :D

  3. Pingback: Visão Widescreen » Blog Archive » XHTML válido no ASP.NET

  4. Felipe says:

    Parabéns , esse “truque”, deu certo.

  5. Vagner says:

    Ops!
    Obrigado! Eu estava tentando usar mas dava problemas no IE.

Leave a Reply

Your email address will not be published. Required fields are marked *