Tratando de disparar el evento onload en la etiqueta de script


Estoy tratando de cargar un conjunto de scripts en orden, pero el evento onload no se está disparando para mí.

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

Supongo que eventos nativos como el.onload no se dispara cuando se usa jQuery para anexar el elemento al DOM. Si utilizo nativo document.body.appendChild(el) entonces se dispara como se esperaba.

Author: Peter Mortensen, 2013-04-26

1 answers

Debe establecer el atributo src después de el evento onload, f. ej:

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

También debe agregar el script al DOM antes de adjuntar el evento onload:

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

Recuerde que debe comprobar readystate para el soporte de IE. Si está utilizando jQuery, también puede probar el método getScript(): http://api.jquery.com/jQuery.getScript /

 99
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-26 08:08:01