Mana yang lebih banyak didukung: window.onload
atau document.onload
?
javascript
event-handling
dom-events
Chris Ballance
sumber
sumber
window
peristiwa ini :onload
danDOMContentLoaded
. Contoh penggunaan :,window.addEventListener('DOMContentLoaded', callback)
. Pada pertengahan 2019, kompatibel dengan semua browser utama. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_eventwindow.onload
dandocument.onload
yang berbeda satu sama lain!window.onload
tampaknya terjadi setelah itu dan memiliki sedikit lebih banyak daripadadocument.onload
! (! Beberapa hal bekerja dengan jendela yang tidak bekerja dengan dokumen Itu berlaku untuk document.onreadstatechange 'lengkap' juga!)Jawaban:
Kapan mereka menembak?
window.onload
Di beberapa browser sekarang mengambil alih peran
document.onload
dan menyala ketika DOM siap juga.document.onload
Seberapa baik mereka didukung?
window.onload
tampaknya menjadi yang paling banyak didukung. Bahkan, beberapa browser yang paling modern memiliki dalam arti digantidocument.onload
denganwindow.onload
.Masalah dukungan peramban kemungkinan besar merupakan alasan mengapa banyak orang mulai menggunakan pustaka seperti jQuery untuk menangani pemeriksaan dokumen yang siap, seperti:
Untuk tujuan sejarah.
window.onload
vsbody.onload
:sumber
window.onload
dan<body onload="">
yang benar-benar berbeda (dan "struktur terpisah dari tindakan" jauh lebih masuk akal dalam konteks ini). Bukannya jawabannya salah, tapi dasarnya.document.onload
JS-setara dengan jQuerydocument.ready
?Gagasan umum adalah bahwa window.onload menyala ketika jendela dokumen siap untuk presentasi dan document.onload menyala ketika pohon DOM (dibangun dari kode markup dalam dokumen) selesai .
Idealnya, berlangganan acara DOM-tree , memungkinkan manipulasi layar-lebar melalui Javascript, hampir tanpa beban CPU . Sebaliknya,
window.onload
dapat memakan waktu cukup lama untuk diaktifkan , ketika beberapa sumber daya eksternal belum diminta, diuraikan dan dimuat.► Skenario pengujian:
Untuk mengamati perbedaan dan bagaimana browser pilihan Anda mengimplementasikan event handler yang disebutkan di atas , cukup masukkan kode berikut dalam
<body>
tag - - dokumen Anda .►Hasil:
Berikut adalah perilaku yang dihasilkan, dapat diamati untuk Chrome v20 (dan mungkin sebagian besar browser saat ini).
document.onload
acaraonload
Kebakaran dua kali ketika dinyatakan di dalam<body>
, sekali ketika dinyatakan di dalam<head>
(di mana acara tersebut bertindak sebagaidocument.onload
).window.onload
event handler dalam batas-batas<head>
elemen HTML .► Proyek Contoh:
Kode di atas diambil dari basis kode proyek ini (
index.html
dankeyboarder.js
).Untuk daftar penangan kejadian objek jendela , silakan merujuk ke dokumentasi MDN.
sumber
Tambahkan Pendengar Acara
Update March 2017
1 JavaScript Vanila
2 jQuery
Semoga berhasil.
sumber
window.addEventListener('load', function() {...})
. Saya juga memperbarui jawaban saya.Menurut Parsing dokumen HTML - Akhirnya ,
Browser mem-parsing sumber HTML dan menjalankan skrip yang ditangguhkan.
A
DOMContentLoaded
dikirimkan padadocument
saat semua HTML telah diuraikan dan telah berjalan. Gelembung acara kewindow
.Browser memuat sumber daya (seperti gambar) yang menunda acara memuat.
Sebuah
load
acara dikirim diwindow
.Oleh karena itu, urutan pelaksanaannya adalah
DOMContentLoaded
pendengar acarawindow
dalam fase penangkapanDOMContentLoaded
pendengar acaradocument
DOMContentLoaded
pendengar acarawindow
dalam fase gelembungload
pendengar acara (termasukonload
pengendali acara) dariwindow
load
Pendengar acara gelembung (termasukonload
penangan acara) didocument
tidak boleh dipanggil. Hanyaload
pendengar yang ditangkap yang dapat dipanggil, tetapi karena memuat sub-sumber daya seperti lembar gaya, bukan karena beban dokumen itu sendiri.sumber
document - load - capture
memang terjadi, yang bertentangan dengan apa yang saya harapkan dalam pencarian saya mengapa pemuatan dokumen tidak terjadi pada saya. Anehnya, itu tidak konsisten. Terkadang muncul, terkadang tidak, kadang muncul dua kali - tetapi tidak pernahdocument - load - bubble
terjadi. Saya sarankan tidak menggunakandocument load
.load
peristiwa dikirim pada sumber daya eksternal. Peristiwa itu tidak menggelembung sehingga biasanya tidak terdeteksi pada dokumen, tetapi harus dalam fase penangkapan. Entri-entri ini merujuk pada muatan elemen<style>
dan<script>
. Saya pikir Edge tepat untuk menunjukkannya, dan Firefox serta Chrome salah.useCapture
opsi mengajari saya sesuatu yang baru.Di Chrome, window.onload berbeda dari
<body onload="">
, sedangkan keduanya sama di Firefox (versi 35.0) dan IE (versi 11).Anda dapat menjelajahinya dengan cuplikan berikut:
Dan Anda akan melihat "jendela dimuat" (yang datang terlebih dahulu) dan "tubuh dimuat" di konsol Chrome. Namun, Anda hanya akan melihat "body onload" di Firefox dan IE. Jika Anda menjalankan "
window.onload.toString()
" di konsol IE & FF, Anda akan melihat:yang berarti bahwa tugas "window.onload = fungsi (e) ..." ditimpa.
sumber
window.onload
danonunload
merupakan jalan pintas kedocument.body.onload
dandocument.body.onunload
document.onload
danonload
penangan pada semua tag html tampaknya dicadangkan namun tidak pernah dipicu'
onload
' dalam dokumen -> benarsumber
window.onload namun mereka seringkali merupakan hal yang sama. Demikian pula body.onload menjadi window.onload di IE.
sumber
Window.onload adalah standar, namun - browser web di PS3 (berdasarkan Netfront) tidak mendukung objek jendela, jadi Anda tidak dapat menggunakannya di sana.
sumber
Pendeknya
windows.onload
yang tidak didukung oleh IE 6-8document.onload
tidak didukung oleh peramban modern mana pun (acara tidak pernah dipecat)Tampilkan cuplikan kode
sumber