Чи потрібні теги CDATA в тегах сценарію, і якщо так, коли?
Іншими словами, коли і де це:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
переважніше до цього:
<script type="text/javascript">
...code...
</script>
Чи потрібні теги CDATA в тегах сценарію, і якщо так, коли?
Іншими словами, коли і де це:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
переважніше до цього:
<script type="text/javascript">
...code...
</script>
Відповіді:
Розділ CDATA необхідний, якщо вам потрібен ваш документ для розбору як XML (наприклад, коли сторінка XHTML інтерпретується як XML), і ви хочете мати можливість писати буквально, i<10
а a && b
не, i<10
іa && b
, як XHTML буде розбирати код JavaScript як проаналізовані дані символів на відміну від символьних даних за замовчуванням. Це не проблема зі скриптами, які зберігаються у зовнішніх вихідних файлах, але для будь-якого вбудованого JavaScript у XHTML ви, ймовірно, захочете використовувати розділ CDATA.
Зауважте, що багато сторінок XHTML ніколи не передбачалося розбирати як XML, і в цьому випадку це не буде проблемою.
Щоб дізнатися більше про тему, див. Https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm
&
і <
символів, вам не потрібен розділ CDATA; він буде добре працювати як в HTML, так і в XHTML. Ви можете легко досягти цього, помістивши весь значний код у зовнішні сценарії та просто використовуючи вбудовані сценарії, наприклад. ініціалізувати змінні (уникнення &
/ <
до \x26
/ \x3C
в рядкових літералах, якщо вам потрібно).
Коли браузери розглядають розмітку як XML:
<script>
<![CDATA[
...code...
]]>
</script>
Коли браузери розглядають розмітку як HTML:
<script>
...code...
</script>
Коли браузери розглядають розмітку як HTML, і ви хочете, щоб ваша розмітка XHTML 1.0 (наприклад) була перевірена.
<script>
//<![CDATA[
...code...
//]]>
</script>
/* ... */
оскільки в іншому випадку, якщо усунені розриви рядків, код порушиться
HTML-аналізатор буде розглядати все між сценарієм <script>
та </script>
як частиною його. Деяким реалізаціям навіть не потрібен правильний закриваючий тег; вони зупиняють інтерпретацію сценарію на " .</
", що правильно відповідно до специфікацій
Оновлення як у HTML5, так і в поточних браузерах, це вже не так.
Так, в HTML, це НЕ можливо:
<script>
var x = '</script>';
alert(x)
</script>
CDATA
Секція не має ніякого ефекту взагалі . Ось чому потрібно писати
var x = '<' + '/script>'; // or
var x = '<\/script>';
або подібне.
Це стосується також файлів XHTML, які подаються як text/html
. (Оскільки IE не підтримує типи вмісту XML, це здебільшого вірно.)
У XML застосовуються різні правила. Зауважте, що браузери (не IE) використовують XML-аналізатор, лише якщо документ XHMTL подається з типом вмісту XML.
Для аналізатора XML script
тег не кращий за будь-який інший тег. Зокрема, вузол сценарію може містити нетекстові дочірні вузли, спровоковані символом " <
"; а знак " &
" позначає сутність символу.
Таким чином, в XHTML, це НЕ можливо:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Щоб обійти це, ви можете загортати весь сценарій у CDATA
розділ. Це повідомляє аналізатору: "У цьому розділі не розглядайте" <
"і" &
"як контрольні символи ." Щоб запобігти інтерпретації JavaScript-механізму " <![CDATA[
" і "]]>
позначки ", ви можете обернути їх у коментарі.
Якщо ваш сценарій не містить " <
" або " &
", вам все одно не потрібен CDATA
розділ.
</
теги всередині скрипту погані.
<script>var b = "<b>bold</b>";</script>
не вдається перевірити, але після прочитання вашої відповіді та зміни до <script>var b = "<b>bold<\/b>";</script>
її виправлення.
По суті, це дозволяти писати документ, що є і XHTML, і HTML. Проблема полягає в тому, що в XHTML аналізатор XML інтерпретуватиме символи &, <,> у тезі сценарію та спричинить помилку розбору XML. Отже, ви можете писати свій JavaScript з об'єктами, наприклад:
if (a > b) alert('hello world');
Але це недоцільно. Більша проблема полягає в тому, що якщо ви читаєте сторінку в HTML, сценарій тегів вважається CDATA «за замовчуванням», і такий JavaScript не запускається. Тому, якщо ви хочете, щоб однакова сторінка була в порядку як з використанням XHTML, так і з HTML-парсерами, вам потрібно укласти тег сценарію в елемент CDATA в XHTML, але НЕ вкладати його в HTML.
Цей трюк означає початок елемента CDATA як коментар JavaScript; в HTML JavaScript аналізатор ігнорує тег CDATA (це коментар). У XHTML аналізатор XML (який запускається перед JavaScript) виявляє його та обробляє решту до кінця CDATA як CDATA.
Це річ X (HT) ML. Якщо ви використовуєте такі символи, як <
і >
всередині JavaScript, наприклад, для порівняння двох цілих чисел, це потрібно було б розібрати як XML, таким чином вони будуть позначатися як початок або кінець тегу.
CDATA означає, що наступні рядки (все, що ]]>
стосується не є XML, тому не повинні таким чином розбирати.
Як НЕ використовувати CDATA в HTML4 , але ви повинні використовувати CDATA в XHTML і повинні використовувати CDATA в XML , якщо у вас є неекрановані символи , такі як <і>.
Це гарантує, що перевірка XHTML працює правильно, якщо у вас вбудований JavaScript на вашу сторінку, а не з посилання назовні.
XHTML вимагає, щоб ваша сторінка суворо відповідала вимогам розмітки XML. Оскільки JavaScript може містити символи зі спеціальним значенням, ви повинні загорнути його в CDATA, щоб переконатися, що перевірка не позначає його як неправильне.
З HTML-сторінок в Інтернеті ви можете просто включити необхідний JavaScript між і тегами. Коли ви перевіряєте HTML на своїй веб-сторінці, вміст JavaScript вважається CDATA (символьними даними), який ігнорується валідатором. Це ж не вірно, якщо ви дотримуєтеся останніх стандартів XHTML при створенні веб-сторінки. З XHTML код між тегами скрипту вважається PCDATA (синтаксичний аналіз даних символів), який обробляється валідатором.
Через це ви не можете просто включати JavaScript між тегами скриптів на своїй сторінці, не "порушуючи" веб-сторінку (принаймні, що стосується валідатора).
Ви можете дізнатися більше про CDATA тут , а більше про XHTML тут .
CDATA вказує, що вміст всередині не є XML.
Ось пояснення на wikipedia
Коли ви збираєтесь суворо дотримуватися XHTML, вам потрібно CDATA так менше, а амперсандів не позначено як недійсні символи.
CDATA необхідний у будь-якому діалекті XML, оскільки текст у вузлі XML розглядається як дочірній елемент, перш ніж його оцінювати як JavaScript. Це також причина, по якій JSLint скаржиться на <
персонажа в регулярних виразах.
Список літератури
Коли ви хочете, щоб він підтвердив (у XML / XHTML - спасибі, Лорен Сегал ).
Таким чином, старший браузер не розбирає код Javascript, і сторінка не ламається.
Зворотна сумісність Треба любити це.