Que garantit exactement le ($) $ (document)?

En exécutant mon application (plutôt complexe) JavaScript / jQuery dans le navigateur Chrome de Google, il semblerait que $(document).ready déclenche alors que certains fichiers JavaScript n'ont pas encore été chargés.

Le code pertinent (simplifié):

Dans mon fichier HTML

 <script>var httpRoot='../../../';var verifyLoad = {};</script> <script src="../../../globalvars.js"></script> <script src="../../../storagekeys.js"></script> <script src="../../../geometry.js"></script> <script src="../../../md5.js"></script> <script src="../../../serialize.js"></script> ... <script src="../../../main.js"></script> 

Comme dernière déclaration de chacun des fichiers .js sauf main.js:

 verifyLoad.FOO = true; // where FOO is a property specific to the file 

par exemple

 verifyLoad.jquerySupplements = true; verifyLoad.serialize = true; 

Dans main.js:

 $(document).ready(function() { function verifyLoadTest (scriptFileName, token) { if (!verifyLoad.hasOwnProperty(token)) { console.log(scriptFileName + ' not properly loaded'); }; }; verifyLoadTest('globalvars.js', 'globalvars'); verifyLoadTest('storagekeys.js', 'storagekeys'); verifyLoadTest('geometry.js', 'geometry'); verifyLoadTest('md5.js', 'geometry'); verifyLoadTest('serialize.js', 'serialize'); ... } 

Beaucoup pour mon étonnement, je vois certains de ces déclencheurs. Cela ne correspond pas à ma compréhension de $(document).ready . Qu'est-ce qui me manque?

L'événement prêt du document est déclenché lorsque le navigateur a analysé le fichier HTML du début à la fin et l'a converti en une structure DOM. Il ne garantit en aucune façon que d'autres ressources (par exemple, les feuilles de style, les images ou, comme dans ce cas, les scripts) auront été chargées. Il se réfère uniquement à la structure DOM, et est déclenché indépendamment de l'état de chargement des ressources de la page.

Si vous souhaitez attendre des ressources à charger, utilisez l'événement de load la window , qui est déclenché uniquement lorsque chaque élément de la page a fini de charger.

Voir:

  • .load
  • .ready