Como acompanhamento do meu Bookmarklet Protip , muitas vezes precisei verificar se a página tinha jQuery e, se não, injetá-lo.
Então eu encontrei uma solução para isso aqui e modifiquei para atender às minhas necessidades.
Aqui está o meu:
//Check if jQuery is in use.
//Else import it.
(function() {
var otherlib=false,
msg='';
if(typeof jQuery!='undefined' &&
jQuery !== null) {
msg='This page already using jQuery v'+jQuery.fn.jquery;
var evt = document.createEvent("HTMLEvents");
evt.initEvent("jquery:loaded",true,true);
evt.msg = msg;
document.dispatchEvent(evt);
} else if (typeof $=='function') {
otherlib=true;
}
function getScript(url,success){
var script=document.createElement('script'),
head=document.getElementsByTagName('head')[0],
done=false;
script.src=url;
script.onload=script.onreadystatechange = function(){
if ( !done &&
(!this.readyState ||
this.readyState == 'loaded' ||
this.readyState == 'complete')
) {
done=true;
if(success !== undefined &&
typeof success === "function")
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
getScript('http://code.jquery.com/jquery-latest.min.js',function() {
var evt = document.createEvent("HTMLEvents");
if (typeof jQuery=='undefined') {
msg='Sorry, but jQuery wasn't able to load';
evt.initEvent("jquery:error",true,true);
evt.msg = msg;
document.dispatchEvent(evt);
} else {
msg='This page is now jQuerified with v' + jQuery.fn.jquery;
if (otherlib) {msg+=' and noConflict(). Use $jq(), not $().';}
evt.initEvent("jquery:loaded",true,true);
evt.msg = msg;
document.dispatchEvent(evt);
}
});
})();
Basicamente, ele verifica se a página está executando o jQuery e, se não, obtém o último do cdn do jquery.
Ele está disparando um evento quando carregado: “jquery: carregado”.
Espero que seja útil. Compartilhe se você pode fazer melhor.
Pode ser necessário um poly-fill para o disparo do evento.