Question

J'exécute un script externe en utilisant un < script > dans < tête > .

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

Était-ce utile?

La solution

Ces solutions fonctionneront:

<body onload="script();">

ou

document.onload = function ...

ou même

window.onload = function ...

Notez que la dernière option est une meilleure solution , car elle est unobstrusive. et est considéré comme plus standard .

Autres conseils

Moyen raisonnablement portable et non-framework permettant à votre script de définir 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;
    }
}

N'oubliez pas que le chargement de la page comporte plusieurs étapes. Au fait, c'est purement JavaScript

"DOMContentLoaded"

Cet événement est déclenché lorsque le document HTML initial a été complètement chargé et analysé , sans attendre le chargement du chargement des feuilles de style, des images et des sous-images. À ce stade, vous pouvez optimiser par programmation le chargement des images et des CSS en fonction de la vitesse de la bande passante et du périphérique utilisateur.

Exectues après le chargement du DOM (avant img et css):

document.addEventListener("DOMContentLoaded", function(){
    //....
});
  

Remarque: JavaScript synchrone met en pause l'analyse du DOM.   Si vous souhaitez que le DOM soit analysé aussi rapidement que possible après que l'utilisateur a demandé la page, vous pouvez activer votre code JavaScript asynchrone et optimiser le chargement des feuilles de style

"charger"

Un événement très différent, load , ne doit être utilisé que pour détecter une page entièrement chargée . C’est une erreur incroyablement populaire d’utiliser une charge où DOMContentLoaded serait bien plus approprié, alors soyez prudent.

Exécutions une fois que tout est chargé et analysé:

window.addEventListener("load", function(){
    // ....
});

Ressources MDN:

https://developer.mozilla.org/en-US/ docs / Web / Événements / DOMContentLoaded https://developer.mozilla.org/en-US/docs/Web / Events / load

Liste MDN de tous les événements:

https://developer.mozilla.org/en-US/docs/ Web / Événements

Vous pouvez mettre un "onload" " attribut à l'intérieur du corps

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

Ou si vous utilisez jQuery, vous pouvez le faire

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

or 

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

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

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

Si les scripts sont chargés dans le < tête > du document, il est alors possible d'utiliser l'attribut différer dans la balise de script.

Exemple:

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

De https: //developer.mozilla. org :

  

différer

     

Cet attribut booléen est défini pour indiquer à un navigateur que le script   est destiné à être exécuté après l'analyse du document, mais avant   DOMContentLoaded de déclenchement.

     

Cet attribut ne doit pas être utilisé si le src   l'attribut est absent (c'est-à-dire pour les scripts intégrés), dans ce cas, il   n'a aucun effet.

     

Pour obtenir un effet similaire pour les scripts insérés dynamiquement, utilisez   async = false à la place. Scripts avec l'attribut de différer s'exécutera dans   l'ordre dans lequel ils apparaissent dans le document.

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 placer ceci?

  

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

Qu'est-ce que cela fait?

  

Ce code indique d'attendre le chargement de l'ensemble du document, puis chargez le    fichier externe deferredfunctions.js .

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

J'ai écrit ceci en fonction du chargement différé de javascript , suivi d'une page google concept et également tiré de cet article Reporter le chargement de javascript

Regardez accrocher document.onload ou dans jQuery $ (document) .load (...) .

document.onreadystatechange = function(){
     if(document.readyState === 'complete'){
         /*code here*/
     }
}

regardez ici: http: // msdn.microsoft.com/en-us/library/ie/ms536957(v=vs.85).aspx

Meilleure méthode, recommandée par Google également. :)

<script type="text/javascript">
  function downloadJSAtOnload() {
   var element = document.createElement("script");
   element.src = "defer.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>

http://www.feedthebot.com/pagespeed/defer-loading- javascript.html

travailler avec un violon

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
   alert("Page is loaded");
}
</script>
</head>

<body onload="myFunction()">
<h1>Hello World!</h1>
</body>    
</html>

Si vous utilisez jQuery,

$ (function () {...});

est équivalent à

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

Voir Quel événement est déclenché par JQuery $ function ()?

<body onload="myFunction()">

Ce code fonctionne bien.

Mais la méthode window.onload a différentes dépendances. Il se peut donc que cela ne fonctionne pas tout le temps.

Je trouve parfois sur des pages plus complexes que tous les éléments n'ont pas été chargés par le temps window.onload est déclenché. Si c'est le cas, ajoutez setTimeout avant que votre fonction ne soit différée. Ce n’est pas élégant, mais c’est un simple hack qui rend bien.

window.onload = function(){ doSomethingCool(); };

devient ...

window.onload = function(){ setTimeout( function(){ doSomethingCool(); }, 1000); };

Il suffit de définir < body onload = "aFunction ()" > à appeler une fois la page chargée. Votre code dans le script est compris entre aFunction () {} .

$ (fenêtre) .on ("charger", function () {...});

.ready () me convient le mieux.

$(document).ready(function(){ ... });

.load () fonctionnera, mais ne fonctionnera pas. attendez que la page soit chargée.

jQuery(window).load(function () { ... });

Ne fonctionne pas pour moi, rompt le script suivant en ligne. J'utilise également jQuery 3.2.1 avec d'autres fourches jQuery.

Pour masquer la superposition de chargement de mes sites Web, j'utilise les éléments suivants:

<script>
$(window).on("load", function(){
$('.loading-page').delay(3000).fadeOut(250);
});
</script>

Utilisation de la bibliothèque YUI (j'adore):

YAHOO.util.Event.onDOMReady(function(){
    //your code
});

Portable et beau! Cependant, si vous n'utilisez pas YUI pour d'autres tâches (voir sa documentation), je dirais que cela ne vaut pas la peine de les utiliser.

N.B. : pour utiliser ce code, vous devez importer 2 scripts

<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/yahoo/yahoo-min.js" ></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/event/event-min.js" ></script>

Il existe une très bonne documentation sur Comment détecte si le document a été chargé à l'aide de Javascript ou de Jquery.

En utilisant le Javascript natif, cela peut être réalisé

if (document.readyState === "complete") {
 init();
 }

Ceci peut également être fait à l'intérieur de l'intervalle

var interval = setInterval(function() {
    if(document.readyState === 'complete') {
        clearInterval(interval);
        init();
    }    
}, 100);

Par exemple, par Mozilla

switch (document.readyState) {
  case "loading":
    // The document is still loading.
    break;
  case "interactive":
    // The document has finished loading. We can now access the DOM elements.
    var span = document.createElement("span");
    span.textContent = "A <span> element.";
    document.body.appendChild(span);
    break;
  case "complete":
    // The page is fully loaded.
    console.log("Page is loaded completely");
    break;
}

Utilisation de Jquery Pour vérifier uniquement si DOM est prêt

// A $( document ).ready() block.
$( document ).ready(function() {
    console.log( "ready!" );
});

Pour vérifier si toutes les ressources sont chargées, utilisez window.load

 $( window ).load(function() {
        console.log( "window loaded" );
    });

Utilisez ce code avec la bibliothèque jQuery, cela fonctionnerait parfaitement.

$(window).bind("load", function() { 

  // your javascript event

});

Comme le dit Daniel, vous pouvez utiliser document.onload.

Les différents frameworks javascript utilisés couramment (jQuery, Mootools, etc.) utilisent un événement personnalisé 'domready', ce qui, je suppose, doit être plus efficace. Si vous développez avec javascript, je vous recommande fortement d'exploiter un framework, cela augmente considérablement votre productivité.

Mon conseil utilise l'attribut async pour les balises de script, ce qui vous aide à charger les scripts externes après le chargement de la page

<script type="text/javascript" src="a.js" async></script>
<script type="text/javascript" src="b.js" async></script>

<script type="text/javascript">
$(window).bind("load", function() { 

// your javascript event here

});
</script>

utilise la fonction d'auto-exécution onload

window.onload = function (){
    /* statements */
}();   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top