9
votes

Est-ce que Inline / Block Javascript est exécuté avant que le document est prêt?

En supposant que l'on a un code JavaScript inline dans un document HTML (le corps par exemple), est-ce que cette pièce de JavaScript est toujours exécutée avant JQuery Document-Ready Code?

Par exemple, est la sécurité suivante? < Pré> xxx

sinon, comment puis-je le faire en sécurité savoir myvar est défini dans un code inline / bloc?


0 commentaires

3 Réponses :


12
votes

Oui, le code ci-dessus est sûr. En ligne JS est exécuté car il est rencontré lorsque le document est analysé de haut en bas. Le gestionnaire prêt au document est exécuté lorsque le document est prêt (évidemment), et il ne sera pas prêt tant que l'ensemble du document a été analysé y compris les scripts en ligne .

Notez que vous n'avez pas besoin d'un gestionnaire prêt à l'emploi du document si vous incluez le code qu'il enveloppe comme la dernière chose dans le corps du document, car à ce stade ne sera pas seulement autre que d'autres JS en ligne ont exécuté, mais tous les éléments de document aura été ajouté à la DOM et sera donc accessible de JS.


0 commentaires

7
votes

Oui, JavaScript Inline est exécuté pendant que le HTML est analysé.

Il est prudent de faire cela, tant que vous n'essayez pas d'obtenir une référence à un élément DOM qui n'a pas encore été analysé (c'est-à-dire n'importe quel élément après le bloc de script dans le code HTML Soude). Vous pouvez également faire référence à toute variable définie sur des blocs de script antérieurs (tant qu'ils sont en portée).

Et, comme l'a souligné Matt Browne dans son commentaire, il est également généralement sûr de ne pas utiliser un écouteur DomContentOached (ou la solution de contournement Oldie ou Window.Onload) si vous mettez votre script qui s'appuie sur le DOM étant chargé juste avant la Fermeture tag. À ce stade, tous les éléments HTML seront déjà dans le DOM (sauf si vous avez d'autres éléments après , qui serait invalide HTML).


2 commentaires

NOTE CONNEXE: Il est également généralement sûr de ne pas utiliser $ (document) .Ready () Si vous mettez votre script qui s'appuie sur jQuery juste avant la fermeture étiqueter.


Une note sur la note: le script qui s'appuie sur jQuery peut être n'importe où après l'inclusion de JQuery.js. Mais nous savons ce que @mattbrowne signifiait: le script qui s'appuie sur le DOM étant prêt peut être placé à la fin du corps plutôt que dans un gestionnaire prêt.



1
votes

Il est prudent de supposer que myvar est accessible depuis dans le $ (document) .Ready (fonction (fonction () {}) .

Si vous exécutez le code dans votre code HTML, myvar devient une propriété de la fenêtre objet JS global objet (i.e. fenêtre.myvar ). Je ne pense pas qu'il soit nécessaire de le créer localement dans la fonction JQuery.


0 commentaires