Apakah Anda memerlukan teks / javascript yang ditentukan dalam tag <script> Anda?

157

Saya membaca bahwa Anda tidak lagi perlu hal-hal seperti type="text/javascript"dan aneh CDATAdan <!--hal-hal di tag naskah Anda. Jadi, alih-alih:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

Anda hanya perlu:

<script>
    //your script here
</script>

Saya tidak ingat di mana saya membaca ini. Itu dari seorang insinyur Google atau Yahoo saya pikir, dan mereka secara spesifik menyebutkan browser mana yang memerlukan konstruksi kuno ini dan mengapa. Adakah yang tahu posting blog / artikel apa yang dibicarakan ini, atau punya sumber yang bagus untuk membicarakan ini?

cmcculloh
sumber
Untuk browser baru, tetapi pada yang lebih lama (jika masih ada) <! - -> diperlukan. Tentang jenis di beberapa aplikasi jika tidak dihilangkan, perlu yang tepat.
Bakudan
1
Baik dibaca tentang CDATA: stackoverflow.com/questions/66837/…
kapa
1
Setiap kali saya membuka file dengan yang text/javascriptditentukan, saya menghapusnya. Itu kebisingan.
The Muffin Man
Posting yang sangat terkait di sini memiliki informasi terkini tentang pedoman HTML5 dalam jawaban yang diterima.
RBT

Jawaban:

135

Lihat tulisan Crockford pada <script>tag , terutama:

Jangan gunakan <!-- //-->retasan dengan skrip. Itu dimaksudkan untuk mencegah skrip muncul sebagai teks pada browser generasi pertama Netscape 1 dan Mosaic. Itu tidak perlu selama bertahun-tahun. <!-- //-->seharusnya memberi sinyal komentar HTML. Komentar harus diabaikan, tidak dikompilasi dan dieksekusi. Juga, komentar HTML tidak disertakan --, sehingga skrip yang mengurangi memiliki kesalahan HTML.

...

type="text/javascript"

Atribut ini bersifat opsional. Sejak Netscape 2, bahasa pemrograman default di semua browser adalah JavaScript. Dalam XHTML, atribut ini diperlukan dan tidak perlu. Dalam HTML, lebih baik tinggalkan saja. Browser tahu apa yang harus dilakukan.

bdukes
sumber
75
Wajib dan tidak perlu? Apakah saya melewatkan sesuatu?
Izkata
17
@Izkata, diperlukan untuk validasi, tetapi tidak memiliki efek apa pun.
bdukes
14
"Peramban tahu apa yang harus dilakukan" ... untuk saat ini. Bagaimana dengan minggu depan ketika RubyScript (saya menjadikan ini sebagai contoh) dipopulerkan dan semua orang memakai celana mereka untuk mengadopsinya? Ini adalah jenis pemikiran picik yang sama yang membuat orang menamai file mereka "_new" dan membingungkan orang lain selama bertahun-tahun. Apakah itu "_new"? Atau "_new_new"? Atau "_newer"? IMO itu picik.
Slobaum
18
@ Slobaum, spesifikasi HTML5 menyatakan bahwa defaultnya adalah JavaScript . Jika ada jenis skrip baru, mereka hanya akan diimplementasikan dalam versi browser baru yang mendukung standar itu dari spesifikasi.
bdukes
8
jika RubyScriptmenjadi populer, itu akan berakhir .rbscriptdan browser akan bertindak sesuai.
Kirk Strobeck
45

Ini rekomendasi Crockford . Saya tahu saya pernah melihatnya bergema di tempat lain (ppk mungkin?). Spesifikasi HTML5 tidak memerlukannya.

Anehnya, menjadi agak au courant untuk menggunakan atribut "type" untuk menandai <script>blok yang tidak ingin Anda evaluasi:

<script type='text/html-template'>
  <div> this is a template </div>
</script>

Dengan memberikan tipe non-JavaScript yang aneh, Anda mendapatkan cara untuk memasukkan teks mentah ke halaman untuk digunakan oleh kode JavaScript lainnya (yang mungkin dalam blok skrip yang dapat dievaluasi).

Runcing
sumber
saya tidak bisa mengerti sepenuhnya. tolong jelaskan, apa type="text/html"artinya sama sekali, dan apa text/javascriptartinya .. terima kasih
T.Todua
4
@tazotodua sebenarnya tidak terlalu penting apa arti "teks / html"; yang penting adalah bahwa itu bukan "teks / javascript", browser akan sepenuhnya mengabaikan isi <script>blok. Namun, itu <script> akan menjadi bagian dari DOM, sehingga kode JavaScript lainnya dapat menemukannya dan mengekstrak isinya.
Runcing
Itu peretasan yang menarik. Tidak yakin untuk apa saya menggunakannya.
brennanyoung
2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli
19

HTML5 tidak memerlukan type="text/javascript"(itu default).

CDATA hanya diperlukan untuk halaman XHTML, jika skrip memiliki karakter HTML (seperti '<' dan '>') di dalamnya.

<!-- seharusnya hanya diperlukan untuk browser LAMA.

Roket Hazmat
sumber
3

The jenis atribut mengidentifikasi bahasa scripting kode tertanam dalam unsur naskah atau direferensikan melalui atribut src elemen. Ini ditentukan sebagai tipe MIME; contoh tipe MIME yang didukung termasuk teks / javascript, teks / ecmascript, aplikasi / javascript, dan aplikasi / ecmascript.

Menurut Spesifikasi HTML 4.01

The jenis atribut menentukan bahasa scripting dari isi elemen dan menimpa bahasa scripting default. Bahasa scripting ditentukan sebagai tipe konten (misalnya, "teks / javascript"). Penulis harus memberikan nilai untuk atribut ini. Tidak ada nilai default untuk atribut ini.

Tetapi dalam HTML5 text/javascript adalah tipe default, sehingga Anda dapat menghilangkan

The jenis atribut memberikan bahasa script atau format data. Jika atribut ada, nilainya harus merupakan tipe MIME yang valid. Parameter charset tidak boleh ditentukan. Default, yang digunakan jika atribut tidak ada, adalah "teks / javascript".

Mithun Sreedharan
sumber
1
dengan kata lain, menghilangkannya dapat menyebabkan kesalahan pada browser lama yang tidak mendukung HTML5
Serge
2

Anda mungkin memikirkan artikel ini di sini dengan ketergantungan bahwa skrip default untuk teks / javascript dalam HTML5 secara otomatis, sementara peramban non-HTML5 masih berharap Anda menentukan jenisnya secara spesifik meskipun mereka hampir selalu menebak teks / javascript. .

FatherStorm
sumber
1

terserah browser untuk menafsirkan scriptblok dengan benar berdasarkan header, saya percaya, dan bukan typeatributnya. Jadi untuk menjawab pertanyaan Anda, tidak, itu tidak diperlukan untuk browser modern (saya berbicara IE7 +, FF, Webkit). Jika Anda mendukung browser yang lebih lama dari itu ... Saya merasa kasihan pada Anda =)

hellatan
sumber
2
Jangan lupa Cina dengan 385+ juta pengguna, banyak di antaranya masih menggunakan IE6. netmarketshare.com/…
chainwork
3
mengetahui kebijakan internet China yang ketat, kemungkinan situs Anda tidak akan pernah mencapai mereka = P
hellatan
Pertanyaannya adalah tentang skrip inline, jadi tidak ada header selain halaman utama (yang akan menjadi beberapa jenis konten HTML). Bagaimanapun, apakah Anda memiliki sumber yang mengindikasikan bahwa browser memperhitungkan header (mis. Jika Anda memiliki <script src = "something"> </script> dan melayani header VBScript, apakah ada browser yang akan menafsirkannya sebagai VBScript) ?
Matthew Flaschen
1

Jika Anda memasukkan tag skrip ke dalam SVG, Anda harus menentukan atribut type. Dan itu seharusnya "text/ecmascript"bukan "text/javascript".

Jika skrip Anda inline (tidak ditautkan), Anda harus membungkus skrip juga dalam deklarasi CDATA. Dengan demikian boilerplate skrip inline untuk SVG (dan varian XML lainnya)

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

Ini mungkin merupakan kasus khusus 'di alam liar', tetapi mereka cukup nyata, dan penggunaan SVG sedang tumbuh, jadi tidak benar bagi orang lain untuk menyarankan bahwa atribut tipe dan CDATA sepenuhnya usang di browser modern. Kasus penggunaannya sempit, ya, tapi tidak pernah terdengar.

"Ubah lingkungan menjadi kebalikannya dan setiap kebijaksanaan menjadi yang terburuk dari kebodohan." - Ashby

brennanyoung
sumber
1
Panggilan yang bagus. Baru saja mengerjakan beberapa SVG yang kompleks dan ini memang masalahnya!
Dave Everitt
1

Specification Spesifikasi HTML5 mendesak penulis untuk menghilangkan atribut daripada menyediakan tipe MIME yang berlebihan. MDN

Standar MIME Sniffing memungkinkan JavaScript dilayani menggunakan semua jenis MIME ( Ekstensi Surat Internet Multiguna ) yang cocok dengan yang berikut ini:

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>
Andy Young
sumber
0

Yah saya terus melihat lebih banyak contoh tanpa teks / javascript tetapi untuk beberapa alasan skrip saya tidak akan berfungsi dalam FF ketika saya melakukannya. Saya akan merekomendasikan menjaga deklarasi teks / javascript. Tag CDATA mencegah javascript ditampilkan sebagai teks biasa di situs web Anda jika browser javascript dimatikan. Secara pribadi saya tidak menggunakan tag itu lagi tidak berpikir ada banyak pengguna di luar sana tanpa dan jika mereka di luar sana mereka mungkin ingin menumbuhkan otak: P

Michael
sumber
Atribut type atau CDATA lama tidak diperlukan kecuali Anda benar-benar ingin menargetkan browser yang benar-benar antik. Mereka seharusnya tidak melukai apa pun, asalkan Anda benar-benar menggunakan jenis yang tepat.
Runcing
Saya menggunakan rilis FF stabil terbaru dan sepertinya mengalami masalah parsing tanpa deklarasi teks / javascript, saya menggunakan jQuery btw tetapi itu seharusnya tidak membuat perbedaan.
Michael
Yah saya menjalankan seluruh aplikasi web saya dengan tag skrip yang hanya polos <script>, tidak ada "bahasa" dan tidak ada "tipe", dan mereka bekerja dengan baik di semua browser. (Ya, semua yang masuk akal: FF, Chrome, Safari, IE, Opera.)
Pointy
1
@pointy sepertinya FatherStorm baru saja mengirim jawaban mengapa ini terjadi. jadi komentar Anda sepertinya salah.
Michael
@Michael mungkin itu kasus bahwa jika Anda telah membuat kesalahan dengan XHTML / Strict Anda mungkin memiliki masalah, tapi itupun saya ragu. Ada persetujuan umum di antara tokoh-tokoh dunia JavaScript bahwa atribut "type" tidak diperlukan, dan pada kenyataannya karena "tipe" yang buruk akan merusak skrip, itu hanya sumber bug.
Runcing
0

type="text/javascript" : Diperlukan dalam HTML 4 dan XHTML, tetapi opsional dalam HTML5.

CDATA : Diperlukan dalam XHTML.

<!--: Digunakan untuk menyembunyikan JavaScript dari browser yang sangat lama. Misalnya: Netscape 1 dan Internet Explorer 2, yang keduanya tidak lagi digunakan.

Blesson Jose
sumber