it-swarm.com.de

Versucht, das Onload-Ereignis für das Skript-Tag auszulösen

Ich versuche, eine Reihe von Skripten der Reihe nach zu laden, aber das Onload-Ereignis wird für mich nicht ausgelöst.

    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);

Ich vermute, dass native Ereignisse wie el.onload nicht ausgelöst werden, wenn jQuery verwendet wird, um das Element an das DOM anzuhängen. Wenn ich native document.body.appendChild(el) verwende, wird es wie erwartet ausgelöst.

85
chovy

Sie sollten das src -Attribut nach dem onload -Ereignis festlegen, z.

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

Sie sollten das Skript auch an das DOM anhängen , bevor Sie das onload -Ereignis anhängen :

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

Denken Sie daran, dass Sie readystate auf IE Unterstützung prüfen müssen. Wenn Sie jQuery verwenden, können Sie auch die getScript() -Methode ausprobieren: http : //api.jquery.com/jQuery.getScript/

121
David Hellsing