JürgenB: Script nachladen: Problem mit Chrome und onload

Beitrag lesen

Hallo,

mit folgenden Script lade ich bei Bedarf weitere Javascripte nach:

  
JB.LoadScript = function(url,callback) {  
  var scr = document.createElement('script');  
  scr.type = "text/javascript";  
  scr.async = true;  
  if(typeof(callback)=="function") {  
    scr.onloadDone = false;  
    scr.onload = function() {  
      if ( ! scr.onloadDone ) {  
        scr.onloadDone = true;  
        JB.Debug_Info(url,"loaded",false);  
        callback();  
      }  
    };  
    scr.onreadystatechange = function() {  
      if ( ( "loaded" === scr.readyState || "complete" === scr.readyState ) && ! scr.onloadDone ) {  
        scr.onloadDone = true;  
        JB.Debug_Info(url,"ready",false);  
        callback();  
      }  
    }  
  }  
  scr.src = url;  
  document.getElementsByTagName('head')[0].appendChild(scr);  
  //document.body.appendChild(scr);  
  //document.getElementsByTagName('head')[0].insertBefore(scr,document.getElementsByTagName('head')[0].firstChild);  
} // LoadScript  

Im IE8 und im IE9 feuert der onreadystatechange wenn das Script verfügbar ist, im Firefox und im Opera der onload. In der Callback-Funktion kann ich auf Funktionen aus dem Script zugreifen.

Im Chrome und im Safari feuert der onload allerdings schon, bevor das Script verfügpar ist. In der Callback-Funktion greife ich auf eine Funktion aus dem nachgeladenem Script zu und erhalte die Fehlermeldung "undefined is not a function".

Habt ihr eine Idee, wie ich zuverlässig prüfen kann, ob das Script da ist bzw. kennt ihr eine bessere Funktion zum Scriptnachladen?

Gruß, Jürgen