Cargue jQuery en un js, luego ejecute un script que depende de él
Tengo un problema único:
Estoy diseñando una aplicación web que crea widgets que un usuario puede incrustar en su propia página (publicaciones de blog, principalmente). Quiero que solo tengan que incrustar una línea, por lo que acabo de hacer que esa línea sea una declaración de inclusión, para extraer un Javascript de mi servidor.
El problema es que estoy construyendo el código del widget usando jQuery, y necesito cargar el complemento jQuery, ya que obviamente no sé si mis usuarios lo tendrán disponible o no. Pensé 'esto debería ser bastante simple' ...
function includeJavaScript(jsFile) {
var script = document.createElement('script');
script.src = jsFile;
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
}
includeJavaScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
jQuery();
Entonces, estoy agregando el archivo jQuery a la cabeza, luego, tratando de ejecutar una función jQuery. El problema es que esto no funciona. Cada vez que lo ejecuto, aparece el error de que la variable jQuery no está definida. He intentado algunas cosas. Intenté poner las funciones de jQuery en un activador onLoad, para que toda la página (incluido, presumiblemente, el archivo jQuery) se cargara antes de llamar a mi script. Intenté poner la función jQuery en un archivo separado y cargarla después de cargar el archivo jQuery lib. Pero tengo la idea de que me falta algo simple: soy nuevo en jQuery, así que si me falta algo obvio, me disculpo ...
EDITAR
OK, probé la sugerencia ofrecida por digitalFresh, de la siguiente manera (usando Safari 5, si eso ayuda), ¿pero sigo teniendo el mismo error?
function test() {
jQuery()
}
var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
script.onload = test(); //execute
document.body.appendChild(script);
EDITAR
OK, FINALMENTE lo hice funcionar, en una sugerencia de Brendan, colocando la llamada SÍ MISMO en un controlador 'onload', así:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent( function() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
document.body.appendChild(script);
jQuery();
});
En este punto, como puede ver, ni siquiera tengo que ponerlo en una 'carga', simplemente funciona. Aunque tengo que admitirlo, todavía no entiendo POR QUÉ funciona, lo que me molesta ...