2013-04-26 9 views
68

Próbuję wczytać zestaw skryptów w kolejności, ale zdarzenie onload nie uruchamia się dla mnie.Próba uruchomienia zdarzenia onload na znaczniku skryptu

var scripts = [ 
     '//cdnjs.cloudflare.com/ajax/libs/less.js/1.3.3/less.min.js', 
     '//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js', 
     MK.host+'/templates/templates.js' 
    ]; 

    function loadScripts(scripts){ 
     var script = scripts.shift(); 
     var el = document.createElement('script'); 
     el.src = script; 
     el.onload = function(script){ 
      console.log(script + ' loaded!'); 
      if (scripts.length) { 
       loadScripts(scripts); 
      } 
      else { 
       console.log('run app'); 
       MK.init(); 
      } 
     }; 

     $body.append(el); 
    } 

    loadScripts(scripts); 

Podejrzewam, że zdarzenia natywne, takie jak el.onload, nie są uruchamiane, gdy jQuery jest używany do dołączenia elementu do DOM. Jeśli używam natywnej wersji document.body.appendChild(el), zostanie ona uruchomiona zgodnie z oczekiwaniami.

+0

wizyta: jes Link: http: //stackoverflow.com/questions/4845762/onload-handler-for-script-tag-in-internet-explorer To jest użycie fuull – Jitesh

Odpowiedz

91

należy ustawić atrybut src po z onload imprez f.ex:

el.onload = function() { //... 
el.src = script; 

Należy również dołączyć skrypt do DOM przed dołączenie zdarzenie onload:

$body.append(el); 
el.onload = function() { //... 
el.src = script; 

Pamiętaj, że musisz sprawdzić readystate dla wsparcia IE. Jeśli używasz jQuery, można również spróbować metody getScript(): http://api.jquery.com/jQuery.getScript/

+0

@chovy literówka, edytowane ... – David

+7

, które w rzeczywistości nie naprawia. Ale jeśli po prostu używam 'document.body.appendChild (el)' zamiast $ ('body'). Append (el); następnie zdarzenie onload zostanie uruchomione zgodnie z oczekiwaniami. – chovy

+0

Nie jestem pewien, jak "naprawić" twój kod, ale najlepszą praktyką jest dołączenie skryptu do '', dołącz obsługę 'onload', a następnie atrybut' src'. W tej kolejności. – David

Powiązane problemy