982 votes

Comment faire en sorte que JavaScript s'exécute après le chargement de la page ?

Je suis en train d'exécuter un script externe, utilisant un <script> dentro de <head> .

Maintenant, puisque le script s'exécute avant la page s'est chargée, je ne peux pas accéder à la <body> entre autres choses. J'aimerais exécuter un certain JavaScript après que le document a été "chargé" (HTML entièrement téléchargé et en RAM). Existe-t-il des événements auxquels je peux m'accrocher lorsque mon script s'exécute, et qui seront déclenchés au chargement de la page ?

1118voto

marcgg Points 25599

Ces solutions fonctionneront :

Comme mentionné dans les commentaires, utilisez différer :

<script src="deferMe.js" defer></script>

ou

<body onload="script();">

ou

document.onload = function ...

ou même

window.onload = function ...

Notez que la dernière option est une meilleure solution puisqu'il s'agit discret et est considéré comme plus standard .

9 votes

Quelle est la différence entre <body onload="script() ;"> et document.onload=fonction ... ?

17 votes

@mentoliptus : document.onload= est non obstructif fr.wikipedia.org/wiki/Unobtrusive_JavaScript

3 votes

Script dans le html ...non non non $(function() { code here }) ; <- javascript.js peut être placé en head et se chargera après le DOM

208voto

chaos Points 69029

Un moyen raisonnablement portable et non-traditionnel pour que votre script définisse une fonction à exécuter au moment du chargement :

if(window.attachEvent) {
    window.attachEvent('onload', yourFunctionName);
} else {
    if(window.onload) {
        var curronload = window.onload;
        var newonload = function(evt) {
            curronload(evt);
            yourFunctionName(evt);
        };
        window.onload = newonload;
    } else {
        window.onload = yourFunctionName;
    }
}

13 votes

+1 pour avoir posté presque exactement ce que j'ai dû inventer il y a 6 mois. Un code comme celui-ci peut être nécessaire si d'autres frameworks et du code sur lesquels vous n'avez aucun contrôle ajoutent des événements onload et que vous voulez en faire autant sans effacer les autres événements onload. J'ai inclus mon implémentation sous la forme d'une fonction et elle nécessite var newonload = function(evt) { curronload(evt) ; newOnload(evt) ; } parce que pour une raison quelconque, le framework que j'utilise nécessite qu'un événement soit passé à l'événement onload.

6 votes

Je viens de découvrir en testant que le code tel qu'il est écrit a pour conséquence que les handlers sont déclenchés dans un ordre non défini lorsqu'ils sont attachés avec attachEvent(). Si l'ordre d'exécution des gestionnaires est important, il est préférable de ne pas utiliser la branche window.attachEvent.

0 votes

Ainsi, cette fonction sera ajoutée en tant que fonction supplémentaire pour exécuter OnLoad, n'est-ce pas ? (plutôt que de remplacer un événement onload existant)

137voto

Nordes Points 815

Vous pouvez ajouter un attribut "onload" dans le corps du message.

...<body onload="myFunction()">...

Ou si vous utilisez jQuery, vous pouvez faire

$(document).ready(function(){ /*code here*/ }) 

or 

$(window).load(function(){ /*code here*/ })

J'espère que cela répond à votre question.

Notez que la commande $(window).load sera exécutée après le rendu du document sur votre page.

34voto

Lucky Points 748

Voici un script basé sur le chargement différé de js après le chargement de la page,

<script type="text/javascript">
  function downloadJSAtOnload() {
      var element = document.createElement("script");
      element.src = "deferredfunctions.js";
      document.body.appendChild(element);
  }

  if (window.addEventListener)
      window.addEventListener("load", downloadJSAtOnload, false);
  else if (window.attachEvent)
      window.attachEvent("onload", downloadJSAtOnload);
  else window.onload = downloadJSAtOnload;
</script>

Où dois-je le placer ?

Collez le code dans votre HTML juste avant le </body> (près du bas de votre fichier HTML).

Que fait-il ?

Ce code indique qu'il faut attendre que le document entier soit chargé, puis charger le fichier fichier externe deferredfunctions.js .

Voici un exemple du code ci-dessus - Différer le rendu de JS

J'ai écrit ceci en me basant sur chargement différé du javascript concept de pagespeed google et provenant également de cet article Différer le chargement du javascript

0 votes

Je pense que cette solution, combinée à la réponse de chaos utilisateur ( stackoverflow.com/a/807997/10712525 ), sera la meilleure chose que vous puissiez faire.

23voto

Daniel A. White Points 91889

Regardez le crochet document.onload ou en jQuery $(document).load(...) .

0 votes

Cet événement est-il fiable ? (Cross browser IE6+ FF2+ etc)

1 votes

Oui, il s'agit d'un DOM standard et multi-navigateur.

20 votes

C'est en fait window.onload qui est plus standard, et non document.onload. AFAIK

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X