Quel est le plus largement pris en charge: window.onload
ou document.onload
?
javascript
event-handling
dom-events
Chris Ballance
la source
la source
window
événements:onload
etDOMContentLoaded
. Exemple d'utilisation:,window.addEventListener('DOMContentLoaded', callback)
. À partir de la mi-2019, compatible avec tous les principaux navigateurs. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_eventwindow.onload
etdocument.onload
sont différents les uns des autres!window.onload
semble avoir lieu après et a un peu plus chargé quedocument.onload
! (Certaines choses fonctionnent avec une fenêtre qui ne fonctionne pas avec le document! Cela vaut également pour document.onreadstatechange 'complete'!)Réponses:
Quand tirent-ils?
window.onload
Dans certains navigateurs, il prend désormais en charge le rôle de
document.onload
et se déclenche lorsque le DOM est également prêt.document.onload
Dans quelle mesure sont-ils pris en charge?
window.onload
semble être le plus largement soutenu. En fait, certains des navigateurs les plus modernes ont en quelque sorte remplacédocument.onload
parwindow.onload
.Les problèmes de prise en charge du navigateur sont probablement la raison pour laquelle de nombreuses personnes commencent à utiliser des bibliothèques telles que jQuery pour gérer la vérification du document en cours de préparation, comme suit:
Aux fins de l'histoire.
window.onload
vsbody.onload
:la source
window.onload
et<body onload="">
qui est complètement différent (et la "structure distincte de l'action" a beaucoup plus de sens dans ce contexte). Non pas que la réponse soit fausse, mais la base en est.document.onload
JS est équivalent à jQuerydocument.ready
?L'idée générale est que window.onload se déclenche lorsque la fenêtre du document est prête pour la présentation et document.onload se déclenche lorsque l' arborescence DOM (créée à partir du code de balisage dans le document) est terminée .
Idéalement, la souscription aux événements de l'arborescence DOM permet des manipulations hors écran via Javascript, n'encourageant presque aucune charge CPU . Au contraire, cela
window.onload
peut prendre un certain temps à se déclencher , lorsque plusieurs ressources externes doivent encore être demandées, analysées et chargées.► Scénario de test:
Pour observer la différence et la façon dont votre navigateur de choix implémente les gestionnaires d'événements susmentionnés , insérez simplement le code suivant dans la
<body>
balise - - de votre document .►Résultat:
Voici le comportement résultant, observable pour Chrome v20 (et probablement la plupart des navigateurs actuels).
document.onload
événement.onload
se déclenche deux fois lorsqu'il est déclaré à l'intérieur du<body>
, une fois lorsqu'il est déclaré à l'intérieur du<head>
(où l'événement agit alors commedocument.onload
).window.onload
gestionnaire d'événements dans les limites de l'<head>
élément HTML .►Exemple de projet:
Le code ci-dessus est tiré de la base de code de ce projet (
index.html
etkeyboarder.js
).Pour une liste des gestionnaires d'événements de l'objet window , reportez-vous à la documentation MDN.
la source
Ajouter un écouteur d'événements
Update March 2017
1 JavaScript vanille
2 jQuery
Bonne chance.
la source
window.addEventListener('load', function() {...})
. J'ai également mis à jour ma réponse.Selon l' analyse des documents HTML - La fin ,
Le navigateur analyse la source HTML et exécute des scripts différés.
A
DOMContentLoaded
est distribué audocument
moment où tout le code HTML a été analysé et exécuté. L'événement bouillonne auwindow
.Le navigateur charge des ressources (comme des images) qui retardent l'événement de chargement.
Un
load
événement est envoyé auwindow
.Par conséquent, l'ordre d'exécution sera
DOMContentLoaded
auditeurs d'événementswindow
dans la phase de captureDOMContentLoaded
auditeurs d'événementsdocument
DOMContentLoaded
auditeurs d'événementswindow
dans la phase de bulleload
écouteurs d'événements (y compris leonload
gestionnaire d'événements) dewindow
Un
load
écouteur d'événement bulle (y compris leonload
gestionnaire d'événements) dansdocument
ne doit jamais être invoqué. Seuls lesload
écouteurs de capture peuvent être invoqués, mais en raison de la charge d'une sous-ressource comme une feuille de style, et non en raison de la charge du document lui-même.la source
document - load - capture
cela arrive, ce qui est contraire à ce que j'attendais dans ma recherche pour savoir pourquoi le chargement de documents ne se produit pas pour moi. Bizarrement, c'est incohérent. Parfois, cela apparaît, parfois non, parfois deux fois - mais cela n'arrive jamaisdocument - load - bubble
. Je suggère de ne pas utiliserdocument load
.load
événement est distribué sur des ressources externes. Cet événement ne bouillonne pas, il n'est donc généralement pas détecté sur le document, mais il devrait l'être lors de la phase de capture. Ces entrées font référence à la charge des éléments<style>
et<script>
. Je pense qu'Edge a raison de les montrer, et Firefox et Chrome ont tort.useCapture
option m'a appris quelque chose de nouveau.Dans Chrome, window.onload est différent de
<body onload="">
, alors qu'ils sont les mêmes dans Firefox (version 35.0) et IE (version 11).Vous pouvez l'explorer par l'extrait de code suivant:
Et vous verrez à la fois "fenêtre chargée" (qui vient en premier) et "body onload" dans la console Chrome. Cependant, vous ne verrez que "onload du corps" dans Firefox et IE. Si vous exécutez "
window.onload.toString()
" dans les consoles d'IE & FF, vous verrez:ce qui signifie que l'affectation "window.onload = function (e) ..." est écrasée.
la source
window.onload
etonunload
sont des raccourcis versdocument.body.onload
etdocument.body.onunload
document.onload
et leonload
gestionnaire sur toutes les balises html semble être réservé mais jamais déclenché'
onload
' dans le document -> truela source
window.onload cependant ils sont souvent la même chose. De même, body.onload devient window.onload dans IE.
la source
Window.onload est la norme, cependant - le navigateur Web de la PS3 (basé sur Netfront) ne prend pas en charge l'objet window, vous ne pouvez donc pas l'utiliser là-bas.
la source
En bref
windows.onload
n'est pas pris en charge par IE 6-8document.onload
n'est pris en charge par aucun navigateur moderne (l'événement n'est jamais déclenché)Afficher l'extrait de code
la source