Je souhaite appeler une fonction après le chargement d'un document, mais le chargement du document peut ou non encore être terminé. S'il s'est chargé, je peux simplement appeler la fonction. S'il ne s'est pas chargé, je peux attacher un écouteur d'événements. Je ne peux pas ajouter d'écouteur d'événement après que onload a déjà été déclenché car il ne sera pas appelé. Alors, comment puis-je vérifier si le document est chargé? J'ai essayé le code ci-dessous mais cela ne fonctionne pas entièrement. Des idées?
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload', DoStuffFunction);
}
}
Réponses:
Il n'y a pas besoin de tout le code mentionné par les galambalazs. La manière multi-navigateurs de le faire en JavaScript pur est simplement de tester
document.readyState
:C'est également ainsi que jQuery le fait.
Selon l'endroit où le JavaScript est chargé, cela peut être fait dans un intervalle:
En fait,
document.readyState
peut avoir trois états:Donc, si vous n'avez besoin que du DOM pour être prêt, vérifiez
document.readyState === "interactive"
. Si vous avez besoin que toute la page soit prête, y compris les images, vérifiezdocument.readyState === "complete"
.la source
document.readyState == "complete"
cela signifie que tout, y compris les images, a été chargé.document.readyState
pour m'assurer que la fonction démarre après l'analyse du DOM, ou plus tard, selon le moment où elle a été appelée. Y a-t-il un événement interactifreadyState
?/loaded|complete/.test(document.readyState)
. Certains navigateurs sont définisdocument.readyState
sur "chargé" au lieu de "complet". De plus, document.readyState ne garantit PAS que les polices ont été chargées, il n'y a pas vraiment de bon moyen de tester cela sans plugin.document.onreadystatechange
? Cela semble plus simple si les navigateurs le prennent en charge. stackoverflow.com/questions/807878/…document.readyState !== "loading"
l'état "DOM ready". Cela évite que des problèmes surgissent si lereadyState
est vérifié tard pour une raison quelconque (après l'état "interactif").Pas besoin de bibliothèque. jQuery a utilisé ce script pendant un certain temps, btw.
http://dean.edwards.name/weblog/2006/06/again/
la source
init
ne fonctionnera pas si ce code que vous avez posté est inclus après le chargement de la page, ce qui est le point de l'OP: il / elle ne peut pas contrôler quand son script est inclus. (notez que seule lasetInterval
branche fonctionnera)Vous voudrez probablement utiliser quelque chose comme jQuery, qui facilite la programmation JS.
Quelque chose comme:
Semblerait faire ce que vous recherchez.
la source
ready()
est appelé après le chargement du document, la fonction passée est exécutée immédiatement.la source
document.loaded
est toujours indéfinibody.readyState === 'loaded'
Si vous voulez réellement que ce code s'exécute au chargement , pas chez domready (c'est-à-dire que vous avez également besoin des images à charger), alors malheureusement, la fonction ready ne le fait pas pour vous. Je fais généralement quelque chose comme ça:
Inclure dans le document javascript (c'est-à-dire toujours appelé avant le lancement du chargement):
Puis votre code:
(Ou l'équivalent dans votre cadre de préférence.) J'utilise ce code pour faire du précaching de javascript et d'images pour les pages futures. Étant donné que le contenu que je reçois n'est pas du tout utilisé pour cette page, je ne veux pas qu'il prenne le pas sur le téléchargement rapide des images.
Il y a peut-être un meilleur moyen, mais je ne l'ai pas encore trouvé.
la source
Mozila Firefox dit que
onreadystatechange
c'est une alternative àDOMContentLoaded
.Dans
DOMContentLoaded
le doc de Mozila dit:Je pense que l'
load
événement devrait être utilisé pour un document complet + le chargement des ressources.la source
Celui ci-dessus avec JQuery est le moyen le plus simple et le plus utilisé. Cependant, vous pouvez utiliser du javascript pur mais essayez de définir ce script dans la tête pour qu'il soit lu au début. Ce que vous recherchez est
window.onload
événement.Vous trouverez ci-dessous un script simple que j'ai créé pour exécuter un compteur. Le compteur s'arrête ensuite après 10 itérations
la source
Essaye ça:
la source
J'ai une autre solution, mon application doit être démarrée quand un nouvel objet de MyApp est créé, il ressemble donc à:
cela fonctionne sur tous les navigateurs, que je connais.
la source