Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/05/2011, 07:16
gorani
 
Fecha de Ingreso: febrero-2010
Ubicación: Bizkaia
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Problemas con scripts dinámicos

Un saludo a todos los foreros y paso al tema en cuestión.

Necesito cargar scripts dinamicamente en aras de ahorrar recursos innecesarios en la carga de datos que quizás no se utilicen.

Hasta ahora cargaba los datos en objetos JSON en en HEAD de la página y todo funciona estupendamente, he pensado que como el tema que trato va de resultados futbolísticos y los ejercicios anteriores no son importantes a menos que se quiera conocer algún dato, esos datos los puedo cargar bajo demanda.
He dividido los objetos en varios archiovos .js para cargarlos cuando se necesiten, el problema que tengo es el mismo que en este [URL="http://www.forosdelweb.com/f13/cargar-scripts-dinamicamente-622349/"]post[/URL] antiguo.

La función que utilizo es esta:

Código:
function cargaSRC (src,callback) {

  var scripts = document.getElementsByTagName('script');
  var cargado = false;
    for (var i = 0, script; script = scripts[i]; i++) {
     if (script.src == src) {
        cargado = true;
        break;
      }
    }
    
  if (!cargado) { 
      var elemento = document.createElement('script');
      elemento.setAttribute('type', 'text/javascript');
      
  if (elemento.readyState){ // Internet Explorer
    elemento.onreadystatechange = function(){
      if (elemento.readyState == "loaded" || elemento.readyState == "complete") {
        elemento.onreadystatechange = null;
        callback ();
      }
    };
  } else { // Otros navegadores
    elemento.onload = function(){
    callback();
  };
}      
      
      elemento.setAttribute('src', src);
      document.getElementsByTagName("head")[0].appendChild(elemento);
  }
}
Como tengo funciones dependientes que llaman a esos datos me da error la primera vez que la utilizo (tengo try catch en las funciones), en cambio la segunda vez es correcta.

El caso es que si anulo callback y coloco la función de la siguiente manera funciona correctamente.

Código:
    };
  } else { // Otros navegadores
    elemento.onload = function(){
    MIFUNCION (Param1,Param2,Param3);
  };
¿ A que se puede deber?

de esta forma llamo a la función así: (la que funciona)

cargaSR (el archivo .js);

de la otra forma llamo a la función así: (funciona la segunda vez)

cargaSRC (el archivo .js, MIFUNCION (Param1,Param2,Param3));

Espero haberme explicado correctamente, un saludo y gracias.

PD: Con la función dynamicLoader de Caerolus me pasa exactamente lo mismo, sólo que esta vez funciona a la segunda de las dos formas.