Làm thế nào sai là đặt thẻ script sau thẻ đóng của body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Làm thế nào sai là đặt thẻ script sau thẻ đóng của body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Câu trả lời:
Nó sẽ không xác nhận bên ngoài <body>
hoặc <head>
các thẻ. Nó cũng sẽ không tạo ra nhiều khác biệt - trừ khi bạn đang thực hiện các thao tác DOM có thể phá vỡ IE trước khi phần tử cơ thể được tải đầy đủ - để đặt nó ngay trước khi đóng </body>
.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>
, hoạt động trong tất cả các trình duyệt chính (mặc dù có lỗi có khả năng phá vỡ trong IE9 trở xuống).
Đúng. Chỉ cho phép nhận xét và thẻ kết thúc cho phần tử html sau thẻ kết thúc cho phần thân.
Trình duyệt có thể thực hiện khôi phục lỗi, nhưng bạn không bao giờ nên phụ thuộc vào điều đó.
Như Andy nói tài liệu sẽ không hợp lệ, tuy nhiên kịch bản vẫn sẽ được diễn giải. Xem đoạn trích từ WebKit chẳng hạn:
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 không cho phép điều này nữa (kể từ Phiên bản 10, tôi tin) và sẽ bỏ qua các tập lệnh như vậy. FF và Chrome vẫn dung thứ cho họ, nhưng có khả năng một ngày nào đó họ sẽ bỏ cái này là không chuẩn.
Thủ tục chèn "tập lệnh phần tử" sau "phần tử phần tử" là "lỗi phân tích cú pháp" theo quy trình được đề xuất bởi W3C . Trong "Xây dựng cây" tạo lỗi và chạy "mã thông báo lại" để xử lý nội dung đó. Vì vậy, nó giống như bước bổ sung. Chỉ sau đó mới có thể chạy "Thực thi tập lệnh" - xem quy trình lược đồ .
Bất cứ điều gì khác "lỗi phân tích". Chuyển "chế độ chèn" thành "trong cơ thể" và xử lý lại mã thông báo.
Về mặt kỹ thuật, đó là quy trình nội bộ, cách họ đánh dấu và tối ưu hóa nó.
Tôi hy vọng tôi đã giúp ai đó.
Đúng. Nhưng nếu bạn thêm mã bên ngoài thì rất có thể nó sẽ không phải là kết thúc của thế giới vì hầu hết các trình duyệt sẽ sửa nó, nhưng nó vẫn là một thực tiễn tồi để vào.
Google thực sự khuyến nghị điều này liên quan đến 'Tối ưu hóa CSS'. Họ đề xuất các kiểu xếp hàng quan trọng trong xếp hàng và trì hoãn phần còn lại (tệp css).
Thí dụ:
<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>
Xem: https://developers.google.com/speed/docs/insights/OptizesCSSDelivery
body
yếu tố. Bài viết đó của Google không khuyên ai làm bất cứ điều gì như vậy.
Các trình duyệt hiện đại sẽ lấy các thẻ script trong phần thân như vậy:
<body>
<script src="scripts/main.js"></script>
</body>
Về cơ bản, điều đó có nghĩa là tập lệnh sẽ được tải sau khi trang kết thúc, điều này có thể hữu ích trong một số trường hợp nhất định (cụ thể là thao tác DOM). Tuy nhiên, tôi thực sự khuyên bạn nên lấy tập lệnh tương tự và đặt nó vào thẻ head với "defer", vì nó sẽ cho hiệu quả tương tự.
<head>
<script src="scripts/main.js" defer></script>
</head>
script
các thẻ có một event
thuộc tính có thể được xác định để xác định khi nào phân tích cú pháp. Vì vậy, bạn có event="load" event="DOMContentLoaded"
để chạy tập lệnh sau khi DOM được tạo hoặc event="beforeunload"
trên beforeunload
sự kiện cửa sổ . Ví dụ , <script src="scripts/main.js" event="DOMContentLoaded"></script>
.