Tentativo di attivare l'evento onload sul tag script


100

Sto cercando di caricare una serie di script in ordine, ma l'evento onload non viene attivato per me.

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

Immagino che eventi nativi come el.onload non vengano attivati ​​quando jQuery viene utilizzato per aggiungere l'elemento al DOM. Se uso il nativo, document.body.appendChild(el)si attiva come previsto.


visitare: thi link: stackoverflow.com/questions/4845762/...~~V~~singular~~3rd Questo è l'uso fuull
Jitesh

Risposte:


143

Dovresti impostare l' srcattributo dopo l' onloadevento, ad esempio:

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

Dovresti anche aggiungere lo script al DOM prima di allegare l' onloadevento:

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

Ricorda che devi verificare il readystatesupporto di IE. Se stai usando jQuery, puoi anche provare il getScript()metodo: http://api.jquery.com/jQuery.getScript/


11
questo in realtà non lo risolve. Ma se uso al document.body.appendChild(el)posto di $ ('body'). Append (el); quindi l'evento onload si attiva come previsto.
chovy

34
puoi aiutarmi a capire perché è importante ordinare?
chovy

12
@David Perché non aggiungere l'elemento per ultimo, come consigliato in posti come html5rocks.com/en/tutorials/speed/script-loading ? Questo dovrebbe rendere srcirrilevante l'ordine in cui aggiungi il listener di eventi e lo imposti .
Stuart P. Bentley

3
Sono curioso: perché è importante allegare un elemento al DOM prima di impostare gli attributi onloade src?
Jake Wilson

1
Se lo script è memorizzato nella cache, non appena aggiungi src l'elemento viene caricato e onload non si attiva. L'aggiunta di onload prima di src assicurerà che onload venga attivato per gli script memorizzati nella cache.
JonShipman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.