Ý tưởng chung là window.onload kích hoạt khi cửa sổ của tài liệu sẵn sàng để trình bày và document.onload kích hoạt khi cây DOM (được xây dựng từ mã đánh dấu trong tài liệu) được hoàn thành .
Lý tưởng nhất là đăng ký các sự kiện của cây DOM , cho phép các thao tác ngoài màn hình thông qua Javascript, phát sinh gần như không tải CPU . Ngược lại, window.onload
có thể mất một lúc để kích hoạt , khi nhiều tài nguyên bên ngoài chưa được yêu cầu, phân tích cú pháp và tải.
► Kịch bản thử nghiệm:
Để quan sát sự khác biệt và cách trình duyệt lựa chọn của bạn thực hiện các trình xử lý sự kiện đã nói ở trên , chỉ cần chèn mã sau vào trong <body>
thẻ - tài liệu của bạn .
<script language="javascript">
window.tdiff = []; fred = function(a,b){return a-b;};
window.document.onload = function(e){
console.log("document.onload", e, Date.now() ,window.tdiff,
(window.tdiff[0] = Date.now()) && window.tdiff.reduce(fred) );
}
window.onload = function(e){
console.log("window.onload", e, Date.now() ,window.tdiff,
(window.tdiff[1] = Date.now()) && window.tdiff.reduce(fred) );
}
</script>
►Result:
Dưới đây là hành vi kết quả, có thể quan sát được đối với Chrome v20 (và có lẽ là hầu hết các trình duyệt hiện tại).
- Không có
document.onload
sự kiện.
onload
bắn hai lần khi được khai báo bên trong <body>
, một lần khi được khai báo bên trong <head>
(khi đó sự kiện sẽ đóng vai trò document.onload
).
- đếm và hành động phụ thuộc vào trạng thái của bộ đếm cho phép mô phỏng cả hai hành vi sự kiện.
- Hoặc khai báo
window.onload
trình xử lý sự kiện trong giới hạn của <head>
phần tử HTML .
► Dự án mẫu:
Mã ở trên được lấy từ cơ sở mã của dự án này ( index.html
và keyboarder.js
).
Để biết danh sách các trình xử lý sự kiện của đối tượng cửa sổ , vui lòng tham khảo tài liệu MDN.
window
sự kiện này :onload
vàDOMContentLoaded
. Ví dụ sử dụng:,window.addEventListener('DOMContentLoaded', callback)
. Tính đến giữa năm 2019, tương thích với tất cả các trình duyệt chính. ----- developer.mozilla.org/en-US/docs/Web/API/Window/ Khăn ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_event