HTML
Trình phân tích cú pháp HTML sẽ coi mọi thứ giữa <script>
và </script>
như một phần của tập lệnh. Một số triển khai thậm chí không cần thẻ đóng chính xác; họ dừng giải thích tập lệnh tại " </
", đúng theo thông số kỹ thuật .
Cập nhật Trong HTML5 và với các trình duyệt hiện tại, đó không còn là vấn đề nữa.
Vì vậy, trong HTML, điều này là không thể:
<script>
var x = '</script>';
alert(x)
</script>
Một CDATA
phần không có tác dụng gì cả . Đó là lý do tại sao bạn cần viết
var x = '<' + '/script>'; // or
var x = '<\/script>';
hoặc tương tự.
Điều này cũng áp dụng cho các tệp XHTML được phân phát dưới dạng text/html
. (Vì IE không hỗ trợ các loại nội dung XML, nên điều này gần như đúng.)
XML
Trong XML, các quy tắc khác nhau được áp dụng. Lưu ý rằng các trình duyệt (không phải IE) chỉ sử dụng trình phân tích cú pháp XML nếu tài liệu XHMTL được cung cấp cùng với loại nội dung XML.
Đối với trình phân tích cú pháp XML, một script
thẻ không tốt hơn bất kỳ thẻ nào khác. Đặc biệt, một nút script có thể chứa các nút con không phải văn bản, được kích hoạt bởi " <
"; và dấu " &
" biểu thị một thực thể ký tự.
Vì vậy, trong XHTML, điều này là không thể:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
Để giải quyết vấn đề này, bạn có thể gói toàn bộ tập lệnh trong một CDATA
phần. Điều này nói với trình phân tích cú pháp: 'Trong phần này, đừng coi " <
" và " &
" là các ký tự điều khiển .' Để ngăn công cụ JavaScript diễn giải các dấu " <![CDATA[
" và " ]]>
", bạn có thể gói chúng trong các nhận xét.
Nếu tập lệnh của bạn không chứa bất kỳ " <
" hoặc " &
" nào, bạn không cần một CDATA
phần nào.