Javascript - Comment détecter si le document est chargé (IE 7 et Firefox 3)
Je veux appeler une fonction après un document à charge, mais le document peut ou peut ne pas avoir fini de charger encore. Si il a la charge, alors je peux juste d'appeler la fonction. Si elle n'a PAS de charge, alors vous pouvez attacher un écouteur d'événement. Je ne peux pas ajouter un eventlistener après onload a déjà mis le feu depuis il ne sera pas appelé. Alors, comment puis-je vérifier si le document est chargé? J'ai essayé le code ci-dessous mais ce n'est pas tout à fait le travail. 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);
}
}
- "Je veux appeler une fonction après un document à charge, mais le document peut ou peut ne pas avoir fini de charger encore." Ce ne calcule pas.
- Je crois qu'il veut dire qu'il n'ont pas le contrôle lors de son bloc de code est d'abord exécuter, mais veut s'assurer DoStuffFunction() n'est pas appelé avant que le document a fini de charger.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin de tout le code mentionné par galambalazs. La croix-navigateur de façon à le faire en JavaScript est simplement pour tester
document.readyState
:C'est aussi comment jQuery t-il.
Selon l'endroit où le JavaScript est chargé, ce qui peut être fait à l'intérieur d'un intervalle:
En fait,
document.readyState
peut avoir trois états:Donc, si vous avez seulement besoin du DOM pour être prêt, vérifier
document.readyState === "interactive"
. Si vous avez besoin de l'ensemble de la page pour être prêt, y compris les images, vérifiezdocument.readyState === "complete"
.document.readyState == "complete"
, ça veut tout dire, y compris les images, ont été chargés.document.readyState
assurez-vous que la fonction commence après DOM a été analysée, ou plus tard, selon le moment où il a été appelé. Est-il un événement pour interactivereadyState
?/loaded|complete/.test(document.readyState)
. Certains navigateurs ensembledocument.readyState
de "chargé" au lieu de "complet". Également le document.readyState ne permet PAS d'assurer les polices ont été chargés, il n'y a pas de bonne façon de tester pour que, sans un plugin.document.onreadystatechange
? Cela semble plus simple si les navigateurs le supportent. stackoverflow.com/questions/807878/...init()
entraîne une erreur. @galambalazs réponse prend soin de cette affaireinit()
. J'ai mis à jour le code.document.readyState !== "loading"
, pour le "DOM ready" de l'état. Cela évite les problèmes de surgir si lereadyState
est vérifié en retard pour une raison quelconque (après le "interactive" de l'état).Pas besoin d'une bibliothèque. jQuery utilisé ce script pour un certain temps, btw.
http://dean.edwards.name/weblog/2006/06/again/
init
ne fonctionnera pas si ce code que vous avez posté est inclus une fois que la page a déjà été chargé, qui est le point de l'OP: il/elle ne peut pas contrôler quand son script est inclus. (notez que seule lasetInterval
direction des travaux)Vous voudrez probablement utiliser quelque chose comme jQuery, ce qui rend JS programmation plus facile.
Quelque chose comme:
Semble faire ce que vous êtes après.
ready()
est appelé après document de charge, la fonction est exécutée immédiatement.document.loaded
est toujours pas définibody.readyState === 'loaded'
Si vous voulez vraiment que ce code fonctionne à charge, pas à domready (c'est à dire que vous devez les images à charger ainsi), puis, malheureusement, la fonction ready ne pas le faire pour vous. En général, je viens de faire quelque chose comme ceci:
Inclure dans le document javascript (c'est à dire toujours appelé avant onload tiré):
Puis votre code:
(Ou l'équivalent dans votre cadre de préférence). J'utilise ce code pour faire la mise en cache préalable de javascript et les images pour les futures pages. Depuis les choses que je reçois n'est pas utilisé pour cette page à tous, je n'en veux pas à prendre le pas sur la rapidité de téléchargement d'images.
Il peut y avoir une meilleure façon, mais je n'ai pas encore trouver.
Mozila Firefox dit que
onreadystatechange
est une alternative àDOMContentLoaded
.Dans
DOMContentLoaded
la Mozila la doc dit:Je pense que
load
événement doit être utilisé pour un document complet+le chargement des ressources.Ci-dessus, on avec JQuery est la méthode la plus simple et la plupart du temps utilisé de façon. Cependant, vous pouvez utiliser javascript, mais d'essayer de définir ce script dans l'en-tête de sorte qu'il est lu au début. Ce que vous cherchez est
window.onload
événement.Ci-dessous est un simple script que j'ai créé pour exécuter un compteur. Le comptoir puis s'arrête au bout de 10 itérations
Essayez ceci:
J'ai une autre solution, mon application doivent être démarré lorsque le nouvel objet de MyApp est créé, de sorte qu'il ressemble:
il fonctionne sur tous les navigateurs, qui, je le sais.