Carregue jQuery em um js e execute um script que depende dele
Eu tenho um problema único -
Estou projetando um aplicativo Web que cria widgets que um usuário pode incorporar em sua própria página (principalmente posts do blog). Eu quero que eles tenham que incorporar apenas uma linha, portanto, essa linha deve ser apenas uma declaração de inclusão, para extrair um Javascript do meu servidor.
O problema é que estou construindo o código do widget usando jQuery e preciso carregar o plug-in jQuery, pois obviamente não sei se meus usuários o terão ou não disponíveis. Eu pensei 'isso deve ser bastante simples' ....
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();
Então, estou anexando o arquivo jQuery à cabeça e depois tentando executar uma função jQuery. O problema é que isso não funciona! Sempre que o executo, recebo o erro de que a variável jQuery não está definida. Eu tentei algumas coisas. Tentei colocar as funções do jQuery em um gatilho onLoad, para que a página inteira (incluindo, presumivelmente, o arquivo jQuery) fosse carregada antes de chamar meu script. Tentei colocar a função jQuery em um arquivo separado e carregá-la após carregar o arquivo lib do jQuery. Mas acho que estou perdendo algo simples - sou novo no jQuery; portanto, se estou perdendo algo óbvio, peço desculpas ...
EDITAR
OK, tentei a sugestão oferecida pelo digitalFresh, da seguinte forma (usando o Safari 5, se isso ajudar), mas ainda recebo o mesmo erro?
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 consegui que funcionasse, em uma sugestão imediata de Brendan, colocando a chamada ITSELF em um manipulador 'onload', da seguinte forma:
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();
});
Neste ponto, como você pode ver, eu nem preciso colocá-lo em uma 'carga' - ele simplesmente funciona. Embora eu deva admitir, ainda não entendo POR QUE funciona, o que me incomoda ...