it-swarm-id.com

Kapan bagian CDATA diperlukan dalam tag skrip?

Apakah tag CDATA pernah diperlukan dalam tag skrip dan jika demikian kapan?

Dengan kata lain, kapan dan di mana ini:

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

lebih disukai dari ini:

<script type="text/javascript">
...code...
</script>
875
brad

Bagian CDATA diperlukan jika Anda memerlukan dokumen Anda untuk diuraikan sebagai XML (misalnya ketika halaman XHTML ditafsirkan sebagai XML) dan Anda ingin dapat menulis i<10 dan a && b secara literal alih-alih i&lt;10 dan a &amp;&amp; b, karena XHTML akan mem-parsing kode JavaScript sebagai data karakter yang diuraikan sebagai lawan data karakter secara default. Ini bukan masalah dengan skrip yang disimpan dalam file sumber eksternal, tetapi untuk setiap JavaScript inline di XHTML Anda akan mungkin ingin menggunakan bagian CDATA.

Perhatikan bahwa banyak halaman XHTML tidak pernah dimaksudkan untuk diuraikan sebagai XML dalam hal ini ini tidak akan menjadi masalah.

Untuk penulisan artikel yang bagus, lihat https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

568
Michael Ridley

Saat browser memperlakukan markup sebagai XML:

<script>
<![CDATA[
    ...code...
]]>
</script>

Saat browser memperlakukan markup sebagai HTML:

<script>
    ...code...
</script>

Saat browser memperlakukan markup sebagai HTML dan Anda ingin markup XHTML 1.0 Anda (misalnya) divalidasi.

<script>
//<![CDATA[
    ...code...
//]]>
</script>
231
Shadow2531

HTML

Pengurai HTML akan memperlakukan semuanya antara <script> dan </script> sebagai bagian dari skrip. Beberapa implementasi bahkan tidak memerlukan tag penutup yang benar; mereka menghentikan interpretasi skrip di "</", yang benar sesuai dengan spesifikasi.

Perbarui Dalam HTML5, dan dengan browser saat ini, itu tidak lagi terjadi.

Jadi, dalam HTML, ini tidak mungkin:

<script>
var x = '</script>';
alert(x)
</script>

Bagian CDATA tidak memiliki sama sekali . Itu sebabnya Anda perlu menulis

var x = '<' + '/script>'; // or
var x = '<\/script>';

atau serupa.

Ini juga berlaku untuk file XHTML yang disajikan sebagai text/html. (Karena IE tidak mendukung tipe konten XML, ini sebagian besar benar.)

XML

Dalam XML, aturan yang berbeda berlaku. Perhatikan bahwa browser (bukan IE) hanya menggunakan parser XML jika dokumen XHMTL disajikan dengan tipe konten XML.

Untuk parser XML, tag script tidak lebih baik dari tag lainnya. Khususnya, simpul skrip dapat berisi simpul anak non-teks, yang dipicu oleh "<"; dan tanda "&" menunjukkan entitas karakter.

Jadi, dalam XHTML, ini tidak mungkin:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

Untuk mengatasinya, Anda dapat membungkus seluruh skrip dalam bagian CDATA Ini memberi tahu parser: 'Di bagian ini, jangan memperlakukan "<" dan "&" sebagai karakter kontrol .' Agar mesin JavaScript tidak menafsirkan tanda "<![CDATA[" dan "]]>", Anda dapat membungkusnya dalam komentar.

Jika skrip Anda tidak mengandung "<" atau "&", Anda tidak memerlukan bagian CDATA.

121
user123444555621

Pada dasarnya itu memungkinkan untuk menulis dokumen yang XHTML dan HTML. Masalahnya adalah bahwa dalam XHTML, parser XML akan menginterpretasikan karakter &, <,> dalam tag script dan menyebabkan kesalahan parsing XML. Jadi, Anda dapat menulis JavaScript dengan entitas, mis .: .:

if (a &gt; b) alert('hello world');

Tapi ini tidak praktis. Masalah yang lebih besar adalah bahwa jika Anda membaca halaman dalam HTML, tag script dianggap CDATA 'secara default', dan JavaScript tersebut tidak akan berjalan. Oleh karena itu, jika Anda ingin halaman yang sama baik-baik saja menggunakan XHTML dan parser HTML, Anda harus menyertakan tag script dalam elemen CDATA di XHTML, tetapi TIDAK untuk menyertakannya dalam HTML.

Trik ini menandai dimulainya elemen CDATA sebagai komentar JavaScript; dalam HTML parser JavaScript mengabaikan tag CDATA (ini adalah komentar). Dalam XHTML, parser XML (yang dijalankan sebelum JavaScript) mendeteksi dan memperlakukan sisanya hingga akhir CDATA sebagai CDATA.

30
ondra

Ini hal X (HT) ML. Saat Anda menggunakan simbol seperti < dan > dalam JavaScript, mis. untuk membandingkan dua bilangan bulat, ini harus diuraikan seperti XML, sehingga mereka menandai sebagai awal atau akhir dari sebuah tag.

CDATA berarti bahwa baris-baris berikut (semuanya hingga ]]> bukan XML dan karenanya tidak boleh diuraikan seperti itu.

23
Franz

Jangan tidak menggunakan CDATA dalam HTML4 tetapi Anda harus menggunakan CDATA dalam XHTML dan harus menggunakan CDATA dalam XML jika Anda memiliki simbol yang tidak terhapus seperti <dan>.

18
Loren Segal

Ini untuk memastikan bahwa validasi XHTML berfungsi dengan benar ketika Anda memiliki JavaScript yang disematkan di halaman Anda, daripada direferensikan secara eksternal.

XHTML mensyaratkan bahwa halaman Anda benar-benar sesuai dengan persyaratan markup XML. Karena JavaScript dapat berisi karakter dengan makna khusus, Anda harus membungkusnya dalam CDATA untuk memastikan bahwa validasi tidak menandainya sebagai cacat.

Dengan halaman HTML di web, Anda hanya bisa memasukkan JavaScript antara dan tag yang diperlukan. Ketika Anda memvalidasi HTML di halaman web Anda, konten JavaScript dianggap sebagai CDATA (data karakter) yang karenanya diabaikan oleh validator. Hal yang sama tidak benar jika Anda mengikuti standar XHTML yang lebih baru dalam mengatur halaman web Anda. Dengan XHTML kode antara tag skrip dianggap PCDATA (data karakter parsed) yang karenanya diproses oleh validator.

Karena itu, Anda tidak bisa hanya memasukkan JavaScript di antara tag skrip pada halaman Anda tanpa 'melanggar' halaman web Anda (setidaknya sejauh menyangkut validator).

Anda dapat belajar lebih banyak tentang CDATA di sini , dan lebih lanjut tentang XHTML di sini .

17
LBushkin

CDATA menunjukkan bahwa konten di dalamnya bukan XML.

Berikut ini penjelasan tentang wikipedia

10
Alex Beardsley

Saat Anda menjalankan kepatuhan XHTML yang ketat, Anda memerlukan CDATA sehingga kurang dari dan ampersand tidak ditandai sebagai karakter yang tidak valid.

9
Chris Shaffer

untuk menghindari kesalahan xml selama validasi xhtml.

8
gehsekky

CDATA memberi tahu browser untuk menampilkan teks apa adanya dan tidak menjadikannya sebagai HTML.

8
Ikaso

CDATA menunjukkan bahwa konten di dalamnya bukan XML.

6
Jim

CDATA diperlukan dalam dialek XML apa pun, karena teks dalam simpul XML diperlakukan sebagai elemen anak sebelum dievaluasi sebagai JavaScript. Ini juga alasan mengapa JSLint mengeluh tentang karakter < di regexes.

Referensi

5
Paul Sweatte

Ketika Anda ingin memvalidasi (dalam XML/XHTML - terima kasih, Loren Segal ).

2
ceejayoz

Dengan begitu browser lama tidak mem-parsing kode Javascript dan halaman tidak rusak.

Kompatibilitas mundur. Akan menyukainya.

2
Tyler Carter