Mengapa don't menutup diri script elemen bekerja?

Apa alasan browser tidak benar mengenali:

<script src="foobar.js" /> <!-- self-closing script element -->

Hanya ini yang diakui:

<script src="foobar.js"></script>

Apakah ini melanggar konsep XHTML dukungan?

Catatan: pernyataan Ini benar setidaknya untuk semua YAITU (6-8 beta 2).

Mengomentari pertanyaan (14)
Larutan

XHTML 1 keterangan mengatakan:

С.3. Elemen Minimalisasi dan Kosong Kandungan Unsur

Mengingat kosong instance dari sebuah elemen dan konten model tidak KOSONG (misalnya, judul yang kosong atau ayat) tidak menggunakan diminimalkan bentuk (misalnya penggunaan <p> </p> dan<p>).

DTD XHTML menentukan script unsur-unsur sebagai:


Komentar (10)

Untuk menambah apa yang Brad dan squadette mengatakan, diri-penutupan sintaks XML <script> benar-benar adalah benar XML, tapi untuk itu untuk bekerja dalam prakteknya, server web anda juga perlu untuk mengirim dokumen anda seperti benar terbentuk XML dengan XML tipe mime seperti application/xhtml+xml di HTTP header Content-Type (dan tidak sebagai text/html).

Namun, mengirim XML tipe mime akan menyebabkan halaman anda tidak dapat diurai oleh IE7, yang hanya suka text/html.

Dari w3:

singkatnya, 'application/xhtml+xml' HARUS digunakan untuk XHTML Keluarga dokumen-dokumen, dan penggunaan 'text/html' HARUS dibatasi HTML-kompatibel XHTML 1.0 dokumen. 'application/xml' dan 'text/xml' juga DAPAT digunakan, tetapi setiap kali sesuai, 'application/xhtml+xml' HARUS digunakan daripada mereka generik XML media jenis.

Saya bingung ini beberapa bulan yang lalu, dan satu-satunya yang bisa diterapkan (kompatibel dengan FF3+ dan IE7) larutan untuk penggunaan yang lama <script></script> sintaks dengan text/html (sintaks HTML + HTML tipe mime).

Jika server anda mengirimkan text/html jenis dalam header HTTP, bahkan jika tidak terbentuk dengan baik dokumen XHTML, FF3+ akan menggunakan HTML rendering mode yang berarti <script> tidak akan bekerja (ini adalah perubahan, Firefox sebelumnya kurang ketat).

Ini akan terjadi terlepas dari apapun mengutak-atik http-equiv elemen meta, XML prolog atau doctype dalam dokumen anda-Firefox cabang setelah mendapat text/html header, yang menentukan apakah HTML atau XML parser terlihat di dalam dokumen, dan HTML parser tidak mengerti <script>.

Komentar (4)

Dalam kasus orang's penasaran, alasan utama adalah bahwa HTML adalah awalnya sebuah dialek dari SGML, yang XML's aneh kakak. Dalam SGML-tanah, unsur-unsur dapat ditentukan dalam DTD sebagai baik menutup diri (mis. BR, HRD, INPUT), secara implisit bisa ditutup (misalnya P, LI, TD), atau secara eksplisit closeable (misalnya TABEL, DIV, SCRIPT). XML tentu saja tidak memiliki konsep ini.

Tag-sup parser yang digunakan oleh browser modern berevolusi dari warisan ini, meskipun mereka parsing model isn't murni SGML lagi. Dan tentu saja anda hati-hati-crafted XHTML sedang diperlakukan sebagai buruk ditulis dengan SGML-terinspirasi tag-sup kecuali anda kirim dengan XML jenis mime. Ini juga mengapa...

<p><div>hello</div></p>

...akan ditafsirkan oleh browser sebagai:

<p></p><div>hello</div><p></p>

...yang merupakan resep untuk indah tidak jelas bug yang dapat melemparkan anda ke cocok sebagai anda mencoba untuk kode terhadap DOM.

Komentar (6)

Orang lain telah menjawab "bagaimana" dan dikutip spec. Berikut adalah kisah nyata dari "mengapa tidak ada `<script>", setelah berjam-jam menggali ke dalam laporan bug dan mailing list.

HTML 4 HTML 4 didasarkan pada [SGML][1]. SGML memiliki beberapa [shorttags][2], seperti <BR//, <B>teks</>, <B/teks/, atau <OL<LI>item</LI</OL>. XML mengambil bentuk pertama, mengubah berakhir sebagai ">" (SGML fleksibel), sehingga menjadi <BR/>. Namun, HTML tidak redfine, jadi <SCRIPT> [harus berarti][3] <SCRIPT>>.
(Ya, '>' harus menjadi bagian dari isi, dan tag masih tidak ditutup.) Jelas, ini bertentangan dengan XHTML dan akan istirahat banyak situs (pada saat browser cukup dewasa [perawatan][4] [ini][5]), jadi [tidak ada yang dilaksanakan shorttags][6] dan spesifikasi [menyarankan terhadap mereka][7]. Secara efektif, semua 'bekerja' self-berakhir tag adalah tag dengan dilarang end tag pada teknis non-konforman parser dan sebenarnya tidak valid. Itu W3C yang [datang dengan hack ini][8] untuk membantu transisi ke XHTML dengan membuat [HTML-kompatibel][9]. Dan <script>'s end tag [tidak dilarang][10]. "Self-berakhir" tag hack dalam HTML 4 dan lebih berarti.

HTML 5 HTML5 telah [lima jenis kategori][11] dan hanya 'void' dan 'asing' tag [boleh menutup diri][12]. Karena <script> tidak batal (itu mungkin memiliki konten) dan tidak asing (seperti MathML atau SVG), <script> tidak bisa menjadi diri tertutup, terlepas dari bagaimana anda menggunakannya. Tapi kenapa? Bisa't mereka menganggapnya sebagai benda asing, membuat kasus khusus, atau sesuatu? HTML 5 bertujuan untuk menjadi [kompatibel][13] dengan implementasi dari HTML 4 dan XHTML 1. Hal ini tidak didasarkan pada SGML atau XML; sintaksnya adalah terutama berkaitan dengan mendokumentasikan dan menyatukan implementasi. (Ini adalah mengapa <br/> <hr/> dll. adalah [valid HTML 5][14] meskipun tidak valid HTML4.) Menutup diri <script> merupakan salah satu dari kategori mana implementasi yang digunakan berbeda. Itu [digunakan untuk bekerja di Chrome, Safari][15], [Opera][16]; untuk pengetahuan saya tidak pernah bekerja di Internet Explorer atau Firefox. [Hal ini dibahas][17] ketika HTML 5 itu sedang disusun dan ditolak karena [istirahat][18] [browser][19] [kompatibilitas][20]. Halaman web yang mandiri-dekat dengan tag script mungkin tidak render dengan benar (jika sama sekali) di browser lama. Ada [proposal][21], tetapi mereka dapat't memecahkan masalah kompatibilitas baik. Setelah draft dirilis, WebKit diperbarui parser menjadi kesesuaian. Menutup diri <script> tidak terjadi dalam HTML 5 karena kompatibilitas dengan HTML 4 dan XHTML 1.

XHTML 1 / XHTML 5 Ketika benar-benar * menjabat sebagai XHTML, <script> adalah benar-benar tertutup, seperti [jawaban yang lain][22] telah menyatakan. Kecuali bahwa [spec kata][23] ini harus* telah bekerja ketika menjabat sebagai HTML:

XHTML Dokumen ... dapat diberi label dengan Media Internet Jenis "text/html" [RFC2854], karena mereka yang kompatibel dengan sebagian besar browser HTML. Jadi, apa yang terjadi? Orang-orang tanya Mozilla untuk biarkan Firefox mengurai sesuai dokumen sebagai XHTML terlepas dari yang ditentukan konten header (yang dikenal sebagai konten mengendus). Ini akan memungkinkan menutup diri script, dan konten mengendus diperlukan lagi pula karena web hoster yang tidak cukup dewasa untuk melayani header yang tepat; YAITU adalah baik. Jika pertama perang browser didn't end dengan IE 6, XHTML mungkin telah berada pada daftar, juga. Tapi itu tidak berakhir. Dan IE 6 bermasalah dengan XHTML. Sebenarnya IE tidak mendukung jenis MIME yang benar di, memaksa orang untuk menggunakan text/html untuk XHTML karena IE diadakan pangsa pasar utama untuk seluruh dekade. Dan juga konten mengendus bisa buruk dan orang-orang yang mengatakan itu harus dihentikan. Akhirnya, ternyata bahwa W3C didn't berarti XHTML harus sniffable: dokumen kedua**, HTML dan XHTML, dan Content-Type aturan. Satu dapat mengatakan bahwa mereka yang berdiri teguh pada "ikuti kami spec" dan mengabaikan apa yang praktis. Kesalahan yang lanjutan kemudian menjadi XHTML versi. Bagaimanapun, keputusan ini diselesaikan masalah ini untuk Firefox. Itu adalah 7 tahun sebelum Chrome lahir; tidak ada orang lain yang signifikan browser. Dengan demikian diputuskan. Menentukan doctype saja tidak memicu XML parsing karena spesifikasi sebagai berikut.**

Komentar (12)

Internet Explorer 8 dan versi sebelumnya tidak mendukung XHTML parsing. Bahkan jika anda menggunakan deklarasi XML dan/atau doctype XHTML, old IE masih mengurai dokumen HTML biasa. Dan di HTML biasa, yang menutup diri sintaks tidak didukung. Trailing slash hanya diabaikan, anda harus menggunakan eksplisit tag penutup.

Bahkan browser dengan dukungan untuk XHTML parsing, seperti IE 9 dan kemudian, masih akan mengurai dokumen HTML kecuali anda melayani dokumen dengan XML jenis konten. Tetapi dalam kasus yang lama YAITU tidak akan menampilkan dokumen pada semua!

Komentar (3)

Orang-orang di atas sudah cukup banyak menjelaskan masalah ini, tapi satu hal yang mungkin bisa membuat hal-hal yang jelas adalah bahwa, meskipun orang-orang yang menggunakan <br/> dan seperti semua waktu dalam dokumen HTML, setiap / dalam posisi seperti ini pada dasarnya diabaikan dan hanya digunakan ketika mencoba untuk membuat sesuatu yang baik dapat di-parse XML dan HTML. Mencoba <p>foo</p>, misalnya, dan anda mendapatkan regular ayat.

Komentar (0)

Self closing tag script tidak't bekerja, karena script tag dapat berisi kode inline, dan HTML tidak cukup pintar untuk mengaktifkan atau menonaktifkan fitur yang didasarkan pada kehadiran dari sebuah atribut.

Di sisi lain, HTML tidak memiliki tag, termasuk referensi untuk luar resources: <link> tag, dan hal ini dapat menutup diri. It's sudah digunakan untuk memasukkan stylesheet, RSS dan Atom feed, canonical Uri, dan segala macam barang lainnya. Mengapa tidak JavaScript?

Jika anda ingin tag script untuk menjadi diri yang tertutup anda dapat't melakukan itu seperti yang saya katakan, tapi ada alternatif, meskipun tidak cerdas. Anda dapat menggunakan self closing tag link dan link ke JavaScript anda dengan memberikan jenis text/javascript dan rel sebagai script, sesuatu seperti di bawah ini:

Komentar (3)

Tidak seperti XML dan XHTML, HTML tidak memiliki pengetahuan tentang self-closing sintaks. Browser yang menafsirkan XHTML HTML don't tahu bahwa / karakter menunjukkan bahwa tag harus menutup diri; sebaliknya mereka menafsirkan itu seperti kosong atribut dan parser masih berpikir tag 'open'.

Hanya sebagai <script menunda> diperlakukan sebagai <script defer="menunda">, <script> diperlakukan sebagai <script /="/">.

Komentar (3)

Internet Explorer 8 dan don't dukungan yang tepat MIME type untuk XHTML, application/xhtml+xml. Jika anda're melayani XHTML sebagai text/html, yang anda harus untuk ini versi lama dari Internet Explorer untuk melakukan apa-apa, itu akan diartikan sebagai HTML 4.01. Anda hanya dapat menggunakan short sintaks dengan setiap elemen yang memungkinkan tag penutup untuk dihilangkan. Lihat HTML 4.01 Spesifikasi.

XML 'bentuk pendek' diartikan sebagai atribut bernama /, yang (karena tidak ada tanda sama dengan) diartikan sebagai memiliki implisit nilai "/". Ini adalah benar-benar salah dalam HTML 4.01 - dideklarasikan atribut yang tidak diizinkan - tetapi browser akan mengabaikan hal itu.

IE9 dan kemudian dukungan XHTML 5 yang disajikan dengan application/xhtml+xml.

Komentar (1)

Yang's karena TAG SCRIPT tidak BATAL ELEMEN.

Dalam aplikasi Dokumen HTML VOID ELEMEN tidak membutuhkan "tag penutup" sama sekali!

Di xhtml, semuanya Generik, oleh karena itu mereka semua perlu terminasi misalnya "tag penutup"; Termasuk br, garis sederhana-break, sebagai <br></br> atau singkatan <br />.

Namun, Script Elemen ini tidak pernah kekosongan atau Elemen parametrik, karena tag script sebelum hal lain, adalah Browser Instruksi, bukan Data Deskripsi deklarasi.

Pada prinsipnya, Semantik Penghentian Instruksi misalnya, "tag penutup" hanya diperlukan untuk pengolahan instruksi yang's semantik tidak dapat dihentikan oleh berhasil tag. Misalnya:

<H1> semantik tidak dapat dihentikan oleh berikut <P> karena itu doesn't membawa cukup sendiri semantik untuk mengganti dan karena itu menghentikan sebelumnya H1 set instruksi. Meskipun itu akan menjadi mampu untuk memecahkan streaming dalam sebuah paragraf baru, garis itu tidak "kuat" untuk menimpa hadir font size & style line-height mengalir ke sungai, saya.e bocor dari H1 (karena P doesn't memiliki itu).

Ini adalah bagaimana dan mengapa "/" (terminasi) signaling telah diciptakan.

Generik tidak ada keterangan penghentian Tag < />, akan cukup untuk setiap satu jatuh yang dihadapi cascade, misalnya: <H1>Judul< /> tapi yang's tidak selalu terjadi, karena kami juga ingin menjadi mampu "bersarang", beberapa perantara tagging Sungai: dibagi menjadi torrents sebelum membungkus / jatuh ke lain cascade. Sebagai konsekuensi generik terminator seperti < /> tidak akan mampu untuk menentukan target properti untuk menghentikan. Misalnya: <b>tebal <i>bold-italic < /> italic </>normal. Pasti akan gagal untuk mendapatkan niat kita benar dan kemungkinan besar akan menafsirkannya sebagai bold bold-itallic bold normal.

Ini adalah bagaimana gagasan dari bungkus ie., wadah lahir. (Pengertian-pengertian tersebut sangat mirip sehingga tidak mungkin untuk membedakan dan kadang-kadang unsur yang sama dapat memiliki keduanya. <H1> adalah pembungkus dan wadah pada waktu yang sama. Sedangkan <B> hanya semantik wrapper). Kami'll perlu polos, tidak ada semantik wadah. Dan tentu saja penemuan Elemen DIV yang datang.

DIV elemen adalah benar-benar 2BR-Wadah. Tentu saja kedatangan CSS membuat seluruh situasi yang lebih aneh daripada itu akan sebaliknya telah dan menyebabkan kebingungan besar dengan banyak konsekuensi besar - secara tidak langsung!

Karena dengan CSS, anda bisa dengan mudah menimpa asli pra&setelah BR perilaku yang baru diciptakan DIV, hal ini sering disebut sebagai "apakah ada wadah". Yang, tentu salah! Div blok elemen dan akan native break garis aliran baik sebelum dan setelah akhir sinyal. Segera WEB mulai menderita halaman DIV-itis. Sebagian besar dari mereka masih ada.

Kedatangan CSS dengan kemampuan untuk sepenuhnya menimpa dan benar-benar mendefinisikan kembali native perilaku dari setiap Tag HTML, entah bagaimana berhasil untuk membingungkan dan mengaburkan seluruh makna HTML keberadaan...

Tiba-tiba semua tag HTML yang muncul seolah-olah usang, mereka dirusak, dilucuti dari semua makna aslinya, identitas dan tujuan. Entah bagaimana anda'd mendapatkan kesan bahwa mereka're tidak lagi diperlukan. Mengatakan: satu wadah pembungkus tag akan cukup untuk semua data presentasi. Hanya menambahkan atribut yang diperlukan. Mengapa tidak bermakna tags sebaliknya; Menciptakan tag nama anda pergi dan membiarkan CSS repot-repot dengan sisa.

Ini adalah bagaimana xhtml lahir dan tentu saja besar tumpul, dibayar begitu mahal oleh pendatang baru dan terdistorsi visi dari apa apa, dan apa yang's sialan tujuan dari itu semua. W3C pergi dari World Wide Web untuk Apa yang Salah, kawan-Kawan?!!

Tujuan dari HTML adalah untuk aliran data yang berarti manusia penerima.

Untuk memberikan Informasi.

Formal bagian ini tidak hanya membantu kejelasan informasi pengiriman. xhtml doesn't memberikan sedikit pertimbangan untuk informasi. - Untuk itu, informasi adalah benar-benar tidak relevan.

Hal yang paling penting dalam hal ini adalah untuk mengetahui dan menjadi mampu untuk memahami bahwa xhtml bukan hanya versi dari beberapa diperpanjang HTML, xhtml adalah benar-benar binatang yang berbeda; dasar; dan oleh karena itu itu adalah bijaksana untuk menjaga mereka terpisah.

Komentar (0)

Perbedaan antara 'benar XHTML', 'imitasi XHTML' dan HTML serta pentingnya dari server yang dikirim tipe MIME telah [sudah dijelaskan di sini juga][1]. Jika anda ingin mencobanya sekarang, di sini adalah sederhana diedit cuplikan dengan live preview termasuk diri ditutup tag script untuk mampu browser:

div { display: flex; }
div + div {flex-direction: column; }

<div>Mime type: <input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml
<input type="radio" onchange="t.onkeyup()" name="mime"> text/html</div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>



  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!

  </p>
Komentar (0)

Hanya modern jawabannya adalah karena tag ini dilambangkan sebagai wajib yang cara

Tag kelalaian Tidak ada, baik awal dan akhir tag adalah wajib.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

Komentar (0)