Ajouté dynamiquement script s'exécute pas
Je suis dynamiquement l'ajout d'un script de github gist. Si je l'ai ajouté à la page html avant le chargement de la page, le script va s'exécuter. Mais Si j'essaie de l'ajouter à la page d'après, il charge, il ajoute le script de la page, mais ne pas l'exécuter.
Ici est de savoir comment je suis l'ajouter à la page
Html
<div id="results"></div>
Javascript
$('#results').click(function() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://gist.github.com/1265374.js?file=GetGists.js";
document.getElementById('results').appendChild(script);
console.log('script added');
});
Ici est l'exemple vivant
http://jsfiddle.net/guanome/JqB3g/3/
OriginalL'auteur guanome | 2011-10-13
Vous devez vous connecter pour publier un commentaire.
Donc, la meilleure option que je peux voir, c'est de remplacer (même si ce n'est temporairement alors que le script charge)
document.write
. C'est une sorte de contourner, mais puisque vous ne contrôlez pas le code de venir, je pense que c'est peut-être le meilleur que vous avez. Vous aussi vous ne devriez pas être à l'aide dedocument.write
à tout moment après le chargement de la page, mais juste au cas où, je serais peut-être passer au peigne fin de votre code.Voici un violon avec une solution de travail. Si vous voulais revenir
document.write
après le chargement du script, vous pouvez toujours vérifier pour voir siscript.complete
esttrue
, autrement, écouter pour uneonload
événement, qui devrait vous permettre de changerdocument.write
dos. Je suis trop paresseux pour le code dans le violon à l'instant, mais ce serait le code, en général:OriginalL'auteur Ktash
C'est l'exécution, mais il ne fonctionne pas car il utilise
document.write
, qui ne peut être utilisé en mode synchrone. Inclure asyncdocument.écrire
, et modifiez votre script en tant que tel:Je voudrais bien, mais je ne contrôle pas ce que github fournit dans leur code d'intégration.
Gris, j'ai ajouté ton code et inclus async document.écrire un violon, et c'est d'ajouter le script de la page, mais ce n'est pas l'exécution du script qui a été ajouté à la page.
OriginalL'auteur Eli Grey
Donc, comme une alternative, en fait, je viens de tombé sur une bibliothèque qui semble comme il pourrait gérer cela pour vous. Découvrez Injector.js, et cela devrait fonctionner pour vous.
OriginalL'auteur Ktash
votre script est en cours d'exécution , vous ne pouvez pas utiliser document.écrire à partir d'elle. Utilisez une alerte pour tester et éviter l'utilisation de document.écrire. Les déclarations de votre fichier js avec le document.écrire ne sera pas exécuté et le reste de la fonction sera exécutée.
OriginalL'auteur Kunal Kinalekar
J'ai été en mesure d'accomplir ceci après des heures à essayer, y compris toutes les autres réponses ici.
Ma balise de script ressemble à ceci:
donc pas de eval() a été possible.
J'ai utilisé jQuery.getScript() à la fin, qui va chercher le fichier js et l'exécute:
OriginalL'auteur xtools
Essayez $(this).append(script) ou $(this).html(script)
this
est juste se référant à la#results
div. Je suis déjà le faire avec le code javascript de base.les deux ne fonctionnent pas, les scripts ne sont pas exécutés
OriginalL'auteur razvancod