14 Stimmen

Asynchrones Laden von JavaScript-Dateien mit Rückruf

Ich versuche, eine ultra einfache Lösung zu schreiben, um ein Bündel von JS-Dateien asynchron zu laden. Ich habe das folgende Skript unten so weit. Allerdings wird der Callback manchmal aufgerufen, wenn die Skripte nicht wirklich geladen sind, was zu einem Fehler "Variable nicht gefunden" führt. Wenn ich die Seite aktualisieren manchmal es funktioniert einfach, weil ich denke, die Dateien kommen direkt aus dem Cache und sind daher dort schneller als der Callback aufgerufen wird, es ist sehr seltsam?

var Loader = function () {

}
Loader.prototype = {
    require: function (scripts, callback) {
        this.loadCount      = 0;
        this.totalRequired  = scripts.length;
        this.callback       = callback;

        for (var i = 0; i < scripts.length; i++) {
            this.writeScript(scripts[i]);
        }
    },
    loaded: function (evt) {
        this.loadCount++;

        if (this.loadCount == this.totalRequired && typeof this.callback == 'function') this.callback.call();
    },
    writeScript: function (src) {
        var self = this;
        var s = document.createElement('script');
        s.type = "text/javascript";
        s.async = true;
        s.src = src;
        s.addEventListener('load', function (e) { self.loaded(e); }, false);
        var head = document.getElementsByTagName('head')[0];
        head.appendChild(s);
    }
}

Gibt es irgendwie zu testen, dass eine JS-Datei vollständig geladen wird, ohne etwas in die eigentliche JS-Datei selbst, weil ich möchte das gleiche Muster verwenden, um Bibliotheken außerhalb meiner Kontrolle (GMaps usw.) zu laden.

Aufrufender Code, direkt vor dem Tag.

var l = new Loader();
l.require([
    "ext2.js",
    "ext1.js"], 
    function() {
        var config = new MSW.Config();
        Refraction.Application().run(MSW.ViewMapper, config);
        console.log('All Scripts Loaded');
    });

Danke für jede Hilfe.

0voto

Heena Jain Punkte 45

Jcors-loader.js funktioniert nicht im Internet Explorer...

Index.html

<html>
    <head>
    <script type="text/javascript" src="/js/jcors-loader.js"></script>
    <script>
        JcorsLoader.load(
                "js/jquery-1.8.0.js",
                "/js/alertme.js",
                function() {
                    $("#result").text("TEST OK");
                }
        );

    </script>
    </head>
    <body>
    <h1 id="result"></h1>
    </body>
    </html>

alertme.js

alert("Geladen");

Dies funktioniert gut in Chrome und Firefox zeigt es "TEST OK" und Popup... Aber keine Nachricht oder Alarm in IE (7,8,9)... Jede Hilfe wird geschätzt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X