Pertanyaan 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 baik dari ini:

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

836
2017-09-15 20:52


asal


Jawaban:


Bagian CDATA diperlukan jika Anda perlu dokumen Anda untuk mengurai XML (misalnya ketika halaman XHTML ditafsirkan sebagai XML) dan Anda ingin bisa menulis secara harfiah i<10 dan a && b dari pada i&lt;10 dan a &amp;&amp; b, karena XHTML akan mem-parsing kode JavaScript sebagai data karakter yang diurai sebagai lawan dari data karakter secara default. Ini bukan masalah dengan skrip yang disimpan dalam file sumber eksternal, tetapi untuk JavaScript sebaris dalam XHTML Anda akan melakukannya mungkin ingin menggunakan bagian CDATA.

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

Untuk langgan yang baik tentang masalah ini, lihat http://javascript.about.com/library/blxhtml.htm


551
2017-09-15 20:54



Ketika browser memperlakukan markup sebagai XML:

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

Ketika browser memperlakukan markup sebagai HTML:

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

Ketika browser memperlakukan markup sebagai HTML dan Anda ingin markup XHTML 1.0 Anda (misalnya) untuk memvalidasi.

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

223
2017-09-15 20:58



HTML

Sebuah parser HTML akan memperlakukan semuanya <script> dan </script> sebagai bagian dari naskah. Beberapa implementasi bahkan tidak membutuhkan tag penutup yang benar; mereka berhenti interpretasi skrip di "</", yang benar menurut spesifikasi.

Memperbarui Di HTML5, dan dengan browser saat ini, itu tidak terjadi lagi.

Jadi, dalam HTML, ini tidak mungkin:

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

SEBUAH CDATA bagian memiliki tidak ada efek 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 jenis konten XML, ini sebagian besar benar.)

XML

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

Untuk parser XML, a script tag tidak lebih baik dari tag lainnya. Khususnya, node skrip mungkin berisi node anak non-teks, dipicu oleh "<"; dan"&"Tanda menunjukkan suatu entitas karakter.

Jadi, di XHTML, ini tidak mungkin:

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

Untuk mengatasi ini, Anda bisa membungkus seluruh skrip dalam a CDATA bagian. Ini memberitahu parser: 'Di bagian ini, jangan memperlakukan "<"dan"&"sebagai karakter kontrol. ' Untuk mencegah mesin JavaScript menafsirkan "<![CDATA["dan"]]>"tanda, Anda bisa membungkusnya di komentar.

Jika skrip Anda tidak berisi "<" atau "&", Anda tidak membutuhkan CDATA bagian saja.


117
2017-09-20 09:05



Pada dasarnya ini adalah untuk memungkinkan untuk menulis dokumen yang keduanya XHTML dan HTML. Masalahnya adalah bahwa dalam XHTML, parser XML akan menafsirkan &, <,> karakter dalam naskah tag dan menyebabkan kesalahan penguraian XML. Jadi, Anda dapat menulis JavaScript Anda dengan entitas, misalnya:

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

Tapi ini tidak praktis. Masalah yang lebih besar adalah jika Anda membaca halaman dalam HTML, tag naskahdianggap CDATA 'secara default', dan JavaScript semacam itu tidak akan berjalan. Oleh karena itu, jika Anda ingin halaman yang sama menjadi OK baik menggunakan XHTML dan parser HTML, Anda harus menyertakan naskah tag dalam elemen CDATA di XHTML, tetapi BUKAN untuk menyertakannya dalam HTML.

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


29
2018-03-01 19:26



Ini adalah 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 akan menandai sebagai awal atau akhir dari sebuah tag.

CDATA berarti bahwa garis-garis berikut (semuanya sampai ]]> bukan XML dan dengan demikian tidak boleh diuraikan seperti itu.


22
2018-03-01 19:19



Melakukan tidak gunakan CDATA di HTML4 tetapi Anda harus gunakan CDATA di XHTML dan harus gunakan CDATA dalam XML jika Anda memiliki simbol yang tidak lolos seperti <dan>.


16
2017-09-15 20:56



Ini untuk memastikan validasi XHTML bekerja dengan benar ketika Anda memiliki JavaScript yang tertanam di halaman Anda, bukan referensi eksternal.

XHTML mengharuskan halaman Anda secara ketat sesuai dengan persyaratan markup XML. Karena JavaScript mungkin berisi karakter dengan arti khusus, Anda harus membungkusnya dalam CDATA untuk memastikan validasi tidak menandainya sebagai salah format.

Dengan halaman HTML di web Anda hanya dapat menyertakan JavaScript yang diperlukan antara dan tag. Ketika Anda memvalidasi HTML di halaman web Anda, konten JavaScript dianggap sebagai CDATA (data karakter) yang oleh 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 di antara tag skrip dianggap PCDATA (data karakter yang diuraikan) yang oleh karenanya diproses oleh validator.

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

Kamu bisa belajar lebih lanjut tentang CDATA di sini, dan lebih lanjut tentang XHTML di sini.


16
2018-03-01 19:20



Ketika Anda pergi untuk kepatuhan XHTML yang ketat, Anda membutuhkan CDATA sehingga kurang dari dan ampersand tidak ditandai sebagai karakter yang tidak valid.


9
2017-09-15 20:54