Yang lain telah menjawab "bagaimana" dan mengutip spec. Berikut adalah kisah nyata "mengapa tidak <script/>
", setelah beberapa jam menggali laporan bug dan milis.
HTML 4
HTML 4 didasarkan pada SGML .
SGML memiliki beberapa shorttags , seperti <BR//
, <B>text</>
, <B/text/
, atau <OL<LI>item</LI</OL>
. XML mengambil bentuk pertama, mendefinisikan ulang akhiran sebagai ">" (SGML fleksibel), sehingga menjadi <BR/>
.
Namun, HTML tidak didefinisikan ulang, jadi <SCRIPT/>
harus berarti <SCRIPT>>
.
(Ya, '>' harus menjadi bagian dari konten, dan tag masih belum ditutup.)
Jelas, ini tidak kompatibel dengan XHTML dan akan menghancurkan banyak situs (pada saat browser sudah cukup dewasa untuk peduli tentang ini ), jadi tidak ada yang menerapkan shorttag dan spesifikasi menyarankan untuk tidak melakukannya .
Secara efektif, semua tag tanpa akhir yang 'berfungsi' adalah tag dengan tag akhir yang dilarang pada parser yang secara teknis tidak sesuai dan pada kenyataannya tidak valid. Itu W3C yang datang dengan peretasan ini untuk membantu transisi ke XHTML dengan membuatnya kompatibel dengan HTML .
Dan <script>
tag akhir tidak dilarang .
Tag "Self-ending" adalah hack dalam HTML 4 dan tidak ada artinya.
HTML 5
HTML5 memiliki lima jenis tag dan hanya tag 'batal' dan 'asing' diizinkan untuk menutup sendiri .
Karena <script>
tidak batal ( mungkin memiliki konten) dan tidak asing (seperti MathML atau SVG), <script>
tidak dapat ditutup sendiri, terlepas dari bagaimana Anda menggunakannya.
Tapi kenapa? Tidak bisakah mereka menganggapnya sebagai benda asing, membuat kasus khusus, atau sesuatu?
HTML 5 bertujuan untuk kompatibel dengan implementasi HTML 4 dan XHTML 1. Ini tidak didasarkan pada SGML atau XML; sintaksinya terutama berkaitan dengan mendokumentasikan dan menyatukan implementasi. (Inilah sebabnya <br/>
<hr/>
dll. Adalah HTML 5 yang valid meskipun HTML4 tidak valid.)
Menutup diri <script>
adalah salah satu tag di mana implementasi yang digunakan berbeda. Ini digunakan untuk bekerja di Chrome, Safari , dan Opera ; setahu saya itu tidak pernah bekerja di Internet Explorer atau Firefox.
Ini dibahas ketika HTML 5 sedang dirancang dan ditolak karena itu merusak kompatibilitas browser . Laman web yang ditutup dengan tag skrip sendiri mungkin tidak ditampilkan dengan benar (jika ada) di peramban lama. Ada proposal lain , tetapi mereka juga tidak bisa menyelesaikan masalah kompatibilitas.
Setelah draft dirilis, WebKit memperbarui parser agar sesuai.
Menutup diri <script>
tidak terjadi di HTML 5 karena kompatibilitas ke belakang ke HTML 4 dan XHTML 1.
XHTML 1 / XHTML 5
Ketika benar-benar berfungsi sebagai XHTML, <script/>
benar-benar tertutup, seperti yang dinyatakan oleh jawaban lain.
Kecuali bahwa spesifikasi mengatakan itu seharusnya berfungsi ketika berfungsi sebagai HTML:
Dokumen XHTML ... dapat dilabeli dengan Jenis Media Internet "text / html" [RFC2854], karena mereka kompatibel dengan sebagian besar browser HTML.
Jadi apa yang terjadi?
Orang-orang meminta Mozilla untuk membiarkan Firefox mem-parsing dokumen yang sesuai sebagai XHTML terlepas dari header konten yang ditentukan (dikenal sebagai sniffing konten ). Ini akan memungkinkan skrip penutup sendiri, dan penghirupan konten tetap diperlukan karena host web tidak cukup dewasa untuk melayani header yang benar; IE bagus dalam hal itu .
Jika perang browser pertama tidak berakhir dengan IE 6, XHTML mungkin sudah ada dalam daftar juga. Tapi itu memang berakhir. Dan IE 6 memiliki masalah dengan XHTML. Bahkan IE tidak mendukung jenis MIME yang benar sama sekali , memaksa semua orang untuk menggunakan text/html
untuk XHTML karena IE diadakan pangsa pasar utama untuk seluruh dekade.
Dan juga mengendus konten bisa sangat buruk dan orang-orang mengatakan itu harus dihentikan .
Akhirnya, ternyata W3C tidak berarti XHTML dapat dihirup : dokumen keduanya , HTML dan XHTML, dan Content-Type
aturan. Bisa dikatakan mereka berdiri teguh pada "ikuti saja spec kami" dan mengabaikan apa yang praktis . Kesalahan yang berlanjut ke versi XHTML yang lebih baru.
Bagaimanapun, keputusan ini menyelesaikan masalah untuk Firefox. Itu 7 tahun sebelum Chrome lahir ; tidak ada browser signifikan lainnya. Jadi diputuskan.
Menentukan doctype saja tidak memicu parsing XML karena spesifikasi berikut.