Валидная вставка Javascript в XHTML

Автор: Cake_Seller

Перевод статьи Стэфена Чапмэна (Stephen Chapman) “Javascript and XHTML“.
Перевел Cake_Seller.

Резюме: в статье описывается метод валидной вставки яваскриптов в XHTML документы.


Далее курсивом примечания переводчика.

В HTML страницах вы можете подключать необходимый яваскрипт помощью тэгов <script> и </script>. Когда вы проверяете вашу HTML страницу валидатором, то яваскрипт рассматривается им как CDATA (character data, в пер. с англ. “символьные данные” ), вследствии чего валидатор их игнорирует. Но если вы вставляете яваскрипт в XHTML страницу, то такой способ вставки не подходит. В XHTML код находящийся между тегами <script> рассматривается как PCDATA (parsed character data, в пер. с англ. “анализируемые символьные данные” ), которые обрабатываются валидатором.

По этому вы не можете подключить яваскрипт между тэгами <script>, не нарушив валидности страницы.

Чтобы исправить эту проблему мы можем сделать одну из двух вещей. Самый простой способ, особенно если скрипт содержит более одной или двух строчек, вынести этот скрипт в отдельный файл, тем самым опустошив содержимое тэга <script>.

Если же скрипт содержит одну или две строчки, то не имеет смысла выносить скрипт в отдельный файл, по этому вы пожелаете оставить содержимое тэгов <script>, при этом, указав валидатору игнорировать это содержимое. Мы это сделаем, разместив код скрипта внутри тэга CDATA. Это выглядит так:

<script type="text/javascript">
<![CDATA[
// content of your Javascript goes here
]]>
</script>

Это исправит проблемы валидности. Но теперь возникает проблема в том, что некоторые старые браузеры не понимают тэга CDATA и поэтому яваскрипт будет работать в этих браузерах. К счасть, многострочные комментарии JavaScript’а начинаются и заканчиваться символами которые не вызывают ошибок при проверке на валидность. Таким образом мы можем закомментировать тэг CDATA так, чтоб он был скрыт от старых браузеров, не вызывал ошибок при проверке на валидность, а также корректно интерпретировался браузером. Это выглядит так:

<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script>

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

Примечание переводчика:

Автор статьи пишет: “Вы не можете подключить яваскрипт между тэгами <script>, не нарушив валидности страницы”. На самом деле это не совсем так. Валидность нарушается только в том случае если между тегами <script> и </script> вы используете перечисленные ниже символы или комбинации символов:

<, &, ]]>, ––

Это касается не только контейнера <script>. Содержимое контейнера <style> также нужно обрамлять тегом <![CDATA[, в случае если он содержит перечисленные выше символы. Это также поможет избежать нарушения валидности документа.

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

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image