2010-11-24 8 views
4

J'écris un bookmarklet javascript. Le problème ici est qu'il peut être invoqué par l'utilisateur avant et après le chargement d'une page. Je veux m'assurer que le script n'est exécuté qu'après le chargement de la page. Comment faire ça?Vérifiez (à partir du bookmarklet) si la page est chargée?

+0

Jusqu'à présent, personne n'a compris la question. ** Il veut savoir si le document a encore fini le chargement. ** – SLaks

+0

Je suis d'accord, voir ma réponse ... – Greg

+1

lol, u jerk, merci pour le down vode ... document ready ne comprend pas quand le document a fini de charger ... que penseriez-vous d'autre ... faire du thé? – CrazyDart

Répondre

3

Une façon de vérifier si le document a été chargé est de vérifier la propriété document.readyState. IE, Firefox 3.6+, Webkit et Opera le supportent.

if (document.readyState === "complete") { 
    // do sth 
} 

Une autre chose est, si vous voulez attendre le chargement du document. Dans ce cas, vous devez écouter certains événements, comme DOMContentLoaded sur le document, load on window ou readyStateChange sur le document.

+0

BTW. certaines personnes vérifient également (document.readyState === "complete" || document.readyState === "loaded"). Je ne sais pas quel navigateur utilise la valeur "chargée", mais cela doit être un problème de compatibilité avec les anciens navigateurs. – Rafael

+1

'loaded' arrive avant 'complete' avant que l'élément ne soit réellement ajouté au DOM. Ça m'a gâché quand j'ajoutais dynamiquement des éléments 'script', et que je ne pouvais pas accéder à leur contenu. – zzzzBov

0
<body onload="start()"> 
</body> 

Lors du démarrage de la fonction, le chargement du DOM est garanti.

2

L'accrochage d'une fonction à la fonction de chargement/chargement du document assure nulle part dans votre code peut être exécuté avant que le DOM soit chargé.

<html> 
<body onload="documentLoad()"> 
    <script type="text/javascript"> 

    function documentLoad() { 
     alert("Document is ready now."); 
    } 

    </script> 
</body> 
</html> 

Si vous voulez utiliser jQuery, vous pouvez utiliser une méthode manuelle très courte pour attacher tout votre code à la fonction prêt.

$(document).ready(function() { 
    // All code in here - will trigger when DOM is loaded. 
} 

Et voici une méthode à court main encore plus court, en utilisant jQuery, pour obtenir le même.

$(function(){ 
    // All code in here - will trigger when DOM is loaded. 
}); 
0
var firstLoad = true; 
$(document).ready(function(){ 
    if (firstLoad){ 
     firstLoad=false; 
     //your code to run once 
    } 
}); 
0

La plupart des réponses sont ici répondent comment attacher une fonction au document fonction prêt, ce qui est ce que davidgale demande ...

L'objet document a une propriété de readyState qui sera défini sur "complete" une fois le chargement terminé.

<html> 
<body> 

    <script type="text/javascript"> 

    function someFunction() { 
     // Called various times throughout page's life. 

     if(document.readyState == "complete") { 
     // Perform DOM actions - will only attempt after DOM is loaded. 
     } 
    } 
    </script> 

</body> 
</html> 
+0

Depuis l'OP: Je veux m'assurer que le script n'est exécuté qu'après le chargement de la page. On dirait que c'est exactement ce qu'il demande. – SRM

Questions connexes