2016-03-29 11 views
3

Ohne Verwendung einer externen Bibliothek Wie kann ich warten, bis ein Skript geladen wird, bevor Sie es verwenden.In JavaScript, wie Sie warten, bis dynamisch injizierte Skripte geladen werden, bevor Sie sie verwenden?

In meinem Fall bin Laden ich die Skripte verwenden:

(function (w,d,t,s,e,r) { 

    e = d.createElement(o); 
    r = d.getElementsByTagName(o)[0]; 
    e.async = 1; 
    e.src = g; 
    r.parentNode.insertBefore(e, r) 

})(window, document, 'script', '//mydomain.com/path/to/script.js'); 

Und später:

// then later I want to use some code form the script: 
var obj = new classFromTheInjectedScript(); 

Gibt es für das Skript zu warten weg zu laden und starten Sie mit dann?

Hinweis: Ich habe eine Möglichkeit, dass ich ein Ereignis innerhalb des Skripts auslösen kann ich will es laden und dann zu hören, wie Sie unten sehen können, aber das ist eine gute Idee?

(function(w,d){ 

    document.addEventListener('scriptLoadedCustomEvent',onScriptReady); 

    function onScriptReady(){ 
     // what I need to do goes here! 
    } 


})(window,document); 
+3

Die Verwendung eines benutzerdefinierten Ereignisses ist eine gute Idee. – Pointy

+1

Angenommen, "ohne Verwendung einer externen Bibliothek" umfasst jQuery, ist es eine Überlegung wert, dass Ihr Homebrew-Event, obwohl effektiv, den Fall behandeln wird, in dem das Skript nicht geladen werden kann. Ich denke, was Sie suchen, ist ein "Versprechen". – Jonline

Antwort

4

haben Sie onload und onerror Veranstaltungen für <script> Tag verwenden können. Gutes Beispiel here.

-2

Sie die Datei Quelle lesen konnte und es in einem Script-Tag manuell einfügen, so dass Sie die AJAX-Antwort-Ereignis

+0

Ich denke, Onload ist ein guter Weg, es zu tun. –

6

Sie sollten in der Lage sein, so etwas zu tun!

var script = document.createElement('script'); 
    script.src = url; //source 

    var callback = function(){ 
     // do stuff after loaded 
    } 
    script.onload = callback; 

    document.head.appendChild(script); //inject where you need it to be 
Verwandte Themen