Опубликовано автор в категориях Верстальщику.

Когда вы вставляете Javascript между тегами <script> и </script> на веб-страницу, которая имеет DOCTYPE HTML 4.01 Transitional или SCRIPT, то при валидации страницы у вас не должно возникнуть особых проблем. Поскольку в структуре HTML содержание Javascript, обрабатывается валидатором как CDATA (character data), содержание которого фактически игнорируется валидатором. Однако если вы следуете стандартам XHTML при верстке, то валидатор читает код между тегами скрипта как PCDATA (parsed character data), которые он не игнорирует, а начинает обрабатывать. И здесь начинаются чудеса. Вернее не чудеса, а всплывают ошибки валидации.

Есть два способа устранить эту проблему. Самый простой путь, особенно если Javascript содержит много строк, состоит в том, чтобы вынести Javascript за пределы страницы с помощью ссылки на внешний файл.

Однако бывают ситуациикога скриптик совсем небольшой и нет смысла выносить его во внешний файл и делать линк. В итоге, если вам нужно включить небольшой крипт непосредственно в страницу между тэгами <script> и </script>, то вам нужно использовать небольшой «хак» (конечно если вы заинтересованы в валидности вашего документа).

Для этого вам нужно «сказать» валидатару, что содержание вашего скрипта должно быть проигнорировано. Сделать это можно, поместив код срипта в пределах тега CDATA:

<script type="text/javascript">

<! [CDATA [

//содержание Вашего Javascript идет сюда

]]>

</script>

Это решает проблему с валидатором. Однако некоторые старые web-браузеры не понимают признака CDATA, и таким образом ваш Javascript не будет в них работать. И здесь нам на помощь приходит обычные комментарии. Можно просто закомментировать с помощью /**/ содержимое открывающихся и закрывающихся тэгов CDATA. Это не отразится негативно ни на работе скрипта, ни на валидности страницы. Делается это как это:

<script type="text/javascript">

/* <! [CDATA [*/

//содержание Вашего Javascript идет сюда

/*]]> */

</script>

Теперь наш Javascript правильно оформлен как для более новых браузеров и валидатора, которые корректно понимают XHTML DTD, так и для старых web-браузеров, которые не понимают XHTML и интерпретируют все на странице как HTML.

Есть еще один вариант, подобный приведенному выше, для вставки кода. Отличие его лишь в том, что при комментировании тега CDATA используются не комментарии типа /*  */, а простой строчный комментарий кода JavaScritp  в виде двух косых черт //

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

alert("<This is compatible with XHTML>");

//]]>
</script>

И еще один пример напоследок. Вы можете встретить много примеров старого кода, где Javascript вписан в страницу и закодирован вот так:

<script type="text/javascript">

<!-//скрываем от действительно старых браузеров, которые никто больше не использует

//также скрываем от браузеров, которые используют XHTML DTD

//содержание Вашего Javascript идет сюда

//->

</script>

Такой пример кода использовался ранее, чтобы скрыть содержание Javascript от действительно очень старых web-браузеров, которые не понимали Javascript и поэтому выводят скрипт на веб-страницу, как часть контента. Если Вы будете использовать этот прием для своего Javascript вместо тега CDATA, то страница также будет валидна, но как валидатор так и современные web-браузеры будут считать все это комментарием и он будет проигнорирован браузером. То есть фактически скрипта не будет, соответственно и выполняться он не будет также. Однако на сегодняшний день уже никто не использует браузеры настолько старые, чтобы использовать последний описанный пример комментирования. Поэтому не рекомендуется использовать последний метод, тем более, когда есть оптимальный вариант, который приведен во втором примере.

Удачной верстки.

Постовой: думаю, многим будет интересно — Легализация контрафактного ПОалюминиевые сплавы прутки

8 комментариев к записи “Javascript и XHTML”

  1. Дмитрий

    Третьим способом убрал кучу ошибок валидатора, которые уже отчаялся победить! Спасибо!

    Ответить

Оставить комментарий

  • (не будет показан)