Differenza tra document.createElement ( 'script') vs jQuery .getScript
-
11-10-2019 - |
Domanda
Ho avuto un problema ottenere .getScript
al lavoro, in alcuni casi strani.
Per esempio, questo funziona per caricare gli script solo quando necessario.
function twitterSDK() {
$jQ.getScript('http://platform.twitter.com/widgets.js');
}
function diggShare() {
$jQ.getScript('http://widgets.digg.com/buttons.js');
}
function buzzShare() {
$jQ.getScript('http://www.google.com/buzz/api/button.js');
}
Tuttavia non sembra di lavorare su un paio di script che ho scritto. Se chiamo .getScript
a prendere questo file JS Ho caricato a Pastebin ( http://pastebin.com/GVFcMJ4P ) e la chiamata tweetStream();
non succede nulla. Tuttavia, se faccio la seguente funziona:
var twitter = document.createElement('script');
twitter.type = 'text/javascript';
twitter.async = true;
twitter.src = '/path-to/tweet.js';
$jQ('.twitter-section').append(twitter);
tweetStream();
Che cosa sto facendo di sbagliato? Qualsiasi aiuto sarebbe fantastico, grazie!
P.S. Quale metodo è più veloce o più efficiente?
Nota: Il mio codice non è ospitato su pastebin, ho appena caricato il contenuto del file .js che è sul mio server a quel sito, quindi è facile da condividere. Non sto leeching di pastebin per l'hosting;)
Soluzione
$jQ.getScript()
di jQuery è una chiamata asincrona. Quindi, se stessi chiamando tweetStream()
subito dopo il getScript()
, sarebbe eseguire prima lo script è arrivato.
È possibile chiamare tweetStream()
da (o come) un callback, invece.
$jQ.getScript('/path-to/tweet.js', function() {
tweetStream();
});
o questo se non vi interessa circa il valore di this
in tweetStream()
.
$jQ.getScript('/path-to/tweet.js', tweetStream);