La première chose à faire est d'oublier d'utiliser src
et le contenu interne sur la même balise de script. Cela ne fonctionne pas d'une manière générale, bien que John Resig y ait réfléchi dans ce numéro blog post.
La deuxième chose est, décider si vous voulez charger le script synchrone ou de manière asynchrone. Si le script est volumineux ou de longue durée, vous pouvez soit le faire de manière asynchrone, soit le faire de manière synchrone en bas de la page afin de ne pas bloquer le rendu. Votre approche (balises de script ajoutant dynamiquement) la chargera et l'exécutera de manière asynchrone, ce qui signifie que le code qui doit être exécuté une fois terminé doit entrer dans un rappel qui se déclenche lorsque le script est terminé. Cette configuration n'est pas très simple, donc je suggère soit d'utiliser jQuery et sa fonction ajax.getScript, soit de simplement copier la fonctionnalité getScript directement à partir de la source jQuery (lignes 3473-3505 de jQuery 1.3.2).
Si vous voulez éviter tout cela, il suffit de le charger de manière synchrone. Ceci est fait en utilisant document.write
. Votre exemple fourni ressemblerait à ceci:
document.write("<scr" + "ipt src='" + src + "' type='text/javascript'></script>");
// The script is guaranteed to have executed at this point
alert('testing');
Assurez-vous de garder « script » divisé comme ça, je ne sais pas pourquoi mais il est une bizarrerie de JavaScript.
Bon point, il pourrait être plus sûr d'utiliser createTextNode et l'ajouter au nœud de script. – AnthonyWJones