Combien de temps jQuery (document) .ready sera-t-il appelé?

Si un fichier javascript tiers se bloque et prend un certain temps à se charger,

jQuery(document).ready(function() {}) 

attendre que cela se charge avant d’être appelé?

Oui, il faut attendre. En particulier, vous ne pouvez pas compter sur jQuery(document).ready() pour se déclencher avant que d’autres scripts aient une chance de s’exécuter. ready se lie à DOMContentReady, readystatechanged ou onload, selon ce qui est disponible.

La documentation indique que “dans la plupart des cas, le script peut être exécuté dès que la hiérarchie DOM est entièrement construite” . Notez que la seule garantie est que le DOM est prêt lorsque cet événement est déclenché. Il ne vous garantit rien d’autre, car il ne le peut tout simplement pas.

Par exemple, cela ne fonctionnera pas dans IE, Firefox ou Chromium, shiny.js est toujours appelé avant que le gestionnaire ready() ait une chance de s’exécuter, peu importe la façon dont vous mélangez les balises de script:

    Test        

Pour votre information, voici le code correspondant à jquery-1.4.2:

 bindReady: function() { if ( readyBound ) { return; } readyBound = true; // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { return jQuery.ready(); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", DOMContentLoaded); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); // If IE and not a frame // continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch(e) {} if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } }, 

Je pense que $ (document) .ready () s’exécute lorsque le document HTML a été chargé et rendu. Lisez la documentation pour plus d’informations

http://docs.jquery.com/Tutorials:Introducing_$ (document) .ready ()

Le fichier js tiers peut être bloquant, surtout s’il se trouve dans la balise head. Essayez de le mettre juste avant la fermeture .

Je pense que la première réponse est incorrecte – document.ready ne signifie pas que tout le contenu doit être chargé, cela signifie que le dom est complet. Sinon, les méthodes jquery exécutées à l’intérieur ne fonctionneraient pas tant que toutes les images (par exemple) n’auraient pas été chargées, ce qui n’est pas vrai.

modifier

Il semble que le comportement des scripts soit différent, mais qu’il puisse être spécifique au navigateur. Il y a une bonne explication ici:

JavaScript: événements de chargement DOM, séquence d’exécution et $ (document) .ready ()