Betapa salahnya menempatkan tag skrip setelah tag penutup body ( </body>). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Betapa salahnya menempatkan tag skrip setelah tag penutup body ( </body>). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Jawaban:
Itu tidak akan memvalidasi di luar tag <body>atau <head>. Itu juga tidak akan membuat banyak perbedaan - kecuali jika Anda melakukan manipulasi DOM yang dapat merusak IE sebelum elemen tubuh dimuat penuh - untuk meletakkannya tepat sebelum penutupan </body>.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>, yang berfungsi di semua browser utama (meskipun dengan bug yang berpotensi pecah di IE9 dan lebih rendah).
Iya. Hanya komentar dan tag akhir untuk elemen html diizinkan setelah tag akhir untuk tubuh.
Browser mungkin melakukan pemulihan kesalahan, tetapi Anda tidak boleh bergantung pada itu.
Seperti yang Andy katakan, dokumen itu tidak valid, tetapi skrip tetap akan ditafsirkan. Lihat cuplikan dari WebKit misalnya:
void HTMLParser::processCloseTag(Token* t)
{
// Support for really broken html.
// we never close the body tag, since some stupid web pages close it before
// the actual end of the doc.
// let's rely on the end() call to close things.
if (t->tagName == htmlTag || t->tagName == bodyTag
|| t->tagName == commentAtom)
return;
...
IE tidak mengizinkan ini lagi (karena Versi 10, saya percaya) dan akan mengabaikan skrip tersebut. FF dan Chrome masih menoleransi mereka, tetapi ada kemungkinan bahwa suatu hari mereka akan menjatuhkan ini sebagai non-standar.
Secara prosedural masukkan "elemen script" setelah "elemen body" adalah "parse error" dengan proses yang direkomendasikan oleh W3C . Di "Konstruksi Pohon" buat kesalahan dan jalankan "tokenize lagi" untuk memproses konten itu. Jadi ini seperti langkah tambahan. Hanya dengan demikian dapat dijalankan "Eksekusi Skrip" - lihat proses skema .
Ada lagi "kesalahan parse". Alihkan "mode penyisipan" ke "in body" dan proses ulang token.
Secara teknis oleh browser itu proses internal, bagaimana mereka menandai dan mengoptimalkannya.
Saya harap saya membantu seseorang.
Iya. Tetapi jika Anda menambahkan kode di luar itu kemungkinan besar tidak akan menjadi akhir dunia karena sebagian besar browser akan memperbaikinya, tetapi itu masih merupakan praktik yang buruk untuk masuk.
Google sebenarnya merekomendasikan ini sehubungan dengan 'Optimasi CSS'. Mereka merekomendasikan in-lining kritis di atas lipat gaya dan menunda sisanya (file css).
Contoh:
<html>
<head>
<style>
.blue{color:blue;}
</style>
</head>
<body>
<div class="blue">
Hello, world!
</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
Lihat: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
bodyelemen. Artikel Google itu tidak menyarankan siapa pun untuk melakukan hal seperti itu.
Browser modern akan mengambil tag skrip di dalam tubuh seperti:
<body>
<script src="scripts/main.js"></script>
</body>
Pada dasarnya, ini berarti bahwa skrip akan dimuat setelah halaman selesai, yang mungkin berguna dalam kasus-kasus tertentu (yaitu manipulasi DOM). Namun, saya sangat menyarankan Anda mengambil skrip yang sama dan meletakkannya di tag kepala dengan "menunda", karena akan memberikan efek yang sama.
<head>
<script src="scripts/main.js" defer></script>
</head>
scripttag memiliki eventatribut yang dapat didefinisikan untuk menentukan kapan mem-parsing skrip. Jadi, Anda harus event="load" event="DOMContentLoaded"menjalankan skrip setelah DOM dibuat atau event="beforeunload"di beforeunloadacara jendela . Contoh <script src="scripts/main.js" event="DOMContentLoaded"></script>,.