มันผิดขนาดไหนที่จะวางแท็กสคริปต์ไว้หลังแท็กปิดของเนื้อความ ( </body>
) ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
มันผิดขนาดไหนที่จะวางแท็กสคริปต์ไว้หลังแท็กปิดของเนื้อความ ( </body>
) ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
คำตอบ:
มันจะไม่ตรวจสอบนอก<body>
หรือ<head>
แท็ก นอกจากนี้ยังจะไม่ทำให้แตกต่างกันมาก - ถ้าคุณกำลังทำกิจวัตร DOM ที่สามารถทำลาย IEก่อนองค์ประกอบร่างกายเป็นแปล้ - </body>
เพื่อวางไว้ก่อนที่จะปิด
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>
ซึ่งใช้งานได้กับเบราว์เซอร์ที่สำคัญทั้งหมด (แม้ว่าจะมีข้อผิดพลาดที่อาจเกิดขึ้นใน IE9 และต่ำกว่า)
ใช่. เฉพาะความคิดเห็นและแท็กปิดท้ายสำหรับองค์ประกอบ html ที่ได้รับอนุญาตหลังจากแท็กสิ้นสุดสำหรับเนื้อหา
เบราว์เซอร์อาจทำการกู้คืนข้อผิดพลาด แต่คุณไม่ควรขึ้นอยู่กับสิ่งนั้น
ดังที่Andyกล่าวว่าเอกสารจะไม่ถูกต้อง แต่อย่างไรก็ตามสคริปต์จะยังคงถูกตีความ ดูตัวอย่างจาก WebKit ตัวอย่าง:
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 ไม่อนุญาตสิ่งนี้อีกต่อไป (ตั้งแต่เวอร์ชัน 10 ฉันเชื่อ) และจะไม่สนใจสคริปต์ดังกล่าว FF และ Chrome ยังคงอดทนกับมัน แต่มีโอกาสที่สักวันหนึ่งที่พวกเขาจะทำสิ่งนี้ไม่ได้มาตรฐาน
procedurally แทรก "องค์ประกอบสคริปต์" หลัง "ร่างกายองค์ประกอบ" คือ "ข้อผิดพลาดในการแยกวิเคราะห์" โดยขั้นตอนที่แนะนำโดย W3C ใน "การสร้างต้นไม้" สร้างข้อผิดพลาดและเรียกใช้ "tokenize อีกครั้ง" เพื่อประมวลผลเนื้อหานั้น มันเหมือนขั้นตอนเพิ่มเติม เท่านั้นแล้วสามารถ runned "ปฏิบัติงานของสคริปต์" - ดูกระบวนการโครงการ
สิ่งอื่นใด "ข้อผิดพลาดในการแยกวิเคราะห์" สลับ "โหมดแทรก" เป็น "ในร่างกาย" และประมวลผลโทเค็นอีกครั้ง
เทคนิคโดยเบราว์เซอร์เป็นกระบวนการภายในวิธีที่พวกเขาทำเครื่องหมายและปรับให้เหมาะสม
ฉันหวังว่าฉันช่วยใครซักคน
ใช่. แต่ถ้าคุณเพิ่มโค้ดข้างนอกมันส่วนใหญ่จะไม่เป็นจุดสิ้นสุดของโลกเนื่องจากเบราว์เซอร์ส่วนใหญ่จะแก้ไขได้
Google แนะนำสิ่งนี้เกี่ยวกับ 'การเพิ่มประสิทธิภาพ CSS' อย่างแท้จริง พวกเขาแนะนำในรูปแบบที่สำคัญเหนือกว่าในการพับและการแยกส่วนที่เหลือ (ไฟล์ css)
ตัวอย่าง:
<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>
ดู: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
body
องค์ประกอบ บทความของ Google นั้นไม่ได้แนะนำให้ใครทำอย่างนั้น
เบราว์เซอร์สมัยใหม่จะใช้แท็กสคริปต์ในเนื้อหาดังนี้:
<body>
<script src="scripts/main.js"></script>
</body>
โดยทั่วไปหมายความว่าสคริปต์จะถูกโหลดเมื่อเพจเสร็จสิ้นซึ่งอาจมีประโยชน์ในบางกรณี (เช่นการจัดการ DOM) อย่างไรก็ตามฉันขอแนะนำให้คุณใช้สคริปต์เดียวกันและวางไว้ในแท็ก head ด้วย "defer" เนื่องจากจะให้ผลเหมือนกัน
<head>
<script src="scripts/main.js" defer></script>
</head>
script
แท็กมีevent
แอตทริบิวต์ที่สามารถกำหนดเพื่อกำหนดว่าจะแยกวิเคราะห์สคริปต์เมื่อใด ดังนั้นคุณต้องevent="load" event="DOMContentLoaded"
รันสคริปต์หลังจากสร้าง DOM หรือevent="beforeunload"
บนbeforeunload
เหตุการณ์หน้าต่าง ตัวอย่าง<script src="scripts/main.js" event="DOMContentLoaded"></script>
.