web-dev-qa-db-fra.com

Appelez la fonction javascript après le chargement du script

J'ai une page HTML où j'ajoute du HTML à dynamiquement via un javascript comme ci-dessous

<script type="text/javascript" src="/myapp/htmlCode"></script>

Je veux appeler une fonction js, par exemple LoadContent (); une fois que le script ci-dessus ajoute le code HTML dynamique.

Quelqu'un peut-il m'aider comment je peux faire ça?

55
Neeraj

vous pouvez y parvenir sans utiliser le javascript de head.js. 

function loadScript( url, callback ) {
  var script = document.createElement( "script" )
  script.type = "text/javascript";
  if(script.readyState) {  // only required for IE <9
    script.onreadystatechange = function() {
      if ( script.readyState === "loaded" || script.readyState === "complete" ) {
        script.onreadystatechange = null;
        callback();
      }
    };
  } else {  //Others
    script.onload = function() {
      callback();
    };
  }

  script.src = url;
  document.getElementsByTagName( "head" )[0].appendChild( script );
}


// call the function...
loadScript(pathtoscript, function() {
  alert('script ready!'); 
});
87
Jaykesh Patel

J'ai eu le même problème ...... ma solution (sans jQuery): 

<script onload="loadedContent();" src ="/myapp/myCode.js"  ></script>
11
Didier68

essayez quelque chose comme ça

var script = document.createElement('script');

if(script.readyState) {  //IE
script.onreadystatechange = function() {
  if ( script.readyState === "loaded" || script.readyState === "complete" ) {
    script.onreadystatechange = null;
    alert(jQuery);
  }
};
 } else{//others
script.onload = function() {
  alert(jQuery); 
}
}
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"
document.documentElement.appendChild(script);
8
socm_

Vous pouvez définir un minuteur d'intervalle et, une fois le script chargé, l'annuler et faire quelque chose.

var fileInterval = setInterval(function() {
    if (functionInFile) {
        // do something
        clearInterval(fileInterval); // clear interval
    }
}, 100); // check every 100ms
5
Rene Pot

en fait, vous pouvez simplement mettre loadedContent() comme dernière ligne du script que vous chargez (ce qui est un peu le concept derrière JSONP)

3
David Fregoli

Découvrez head.js . Il réalisera ce que vous recherchez, en fournissant des rappels lorsque votre fichier a été chargé et exécuté avec succès.

1
CherryFlavourPez

En 2019, peut-être une nouvelle approche préférable.

La réponse de @JaykeshPatel est correcte, mais depuis 2013, je propose une solution plus moderne basée sur Promise:

// definition
function loadScript(scriptUrl) {
  const script = document.createElement('script');
  script.src = scriptUrl;
  document.body.appendChild(script);

  return new Promise(res => {
    script.onLoad = function() {
      res();
    }
  });
}

// use
loadScript('http:// .... /jquery.js')
  .then(() => {
    console.log('Script loaded!');
  });
1
Cristian Traìna

Ma réponse est une extension de la réponse de Jaykesh Patel }. J'ai implémenté ce code afin de charger plusieurs javascript. J'espère que cela aide quelqu'un:

// RECURSIVE LOAD SCRIPTS
function load_scripts( urls, final_callback, index=0 )
{
    if( typeof urls[index+1] === "undefined" )
    {
        load_script( urls[index], final_callback );
    }
    else
    {
        load_script( urls[index], function() {
            load_scripts( urls, final_callback, index+1 );
        } );
    }
}

// LOAD SCRIPT
function load_script( url, callback )
{
    var script = document.createElement( "script" );
    script.type = "text/javascript";
    if(script.readyState) // IE
    {
        script.onreadystatechange = function()
        {
            if ( script.readyState === "loaded" || script.readyState === "complete" )
            {
                script.onreadystatechange = null;
                callback();
            }
        };
    }
    else // Others
    {  
        script.onload = function() { callback(); };
    }
    script.src = url;
    document.getElementsByTagName( "head" )[0].appendChild( script );
    debug("javascript included: "+url);
}

// EXAMPLE  
var main = function()
{
    console.log("main function executed");
}
var js = [ "path/to/script-1", "path/to/script-2", "path/to/script-3" ];
load_scripts( js, main );
0
Marco Panichi