J'ai une balise div qui est remplie de script via un appel ajax, mais le script ne s'exécute pas.
Existe-t-il un moyen de faire exécuter le script?
Si vous utilisez la méthode .html
de jQuery, elle analyse la balise du script et l'évite:
$("div").html('<script type="text/javascript">alert("This should work")</script>');
Si jQuery n'est pas une option, vous pouvez l'écrire en utilisant soit (1) une expression régulière, soit (2) analyser l'arborescence des DOM et trouver les balises de script. (# 2 est la façon dont jQuery le fait)
C'est toujours une bonne idée de séparer le contenu du code. Chargez le contenu via AJAX et code en insérant les balises <script>
. Si vous utilisez jQuery, utilisez $.getScript()
pour charger des scripts de manière dynamique.
Je suppose que vous écrivez une étiquette de script dans innerHTML directement
Cela ne fonctionnera pas.
document.body.innerHTML+="<script>alert(1)</scr"+"ipt>";
Vous devez écrire à l'aide de fonctions DOM comme celle-ci
var tag = document.createElement("script"); tag.innerHTML="alert(1)"; document.body.appendChild(tag); //can be append to any object other than body
Ou mieux utiliser jQuery
Si vous définissez innerHtml de div, les balises de script doivent être exécutées. J'utilise $ ("# divid"). Load () pour charger le contenu dynamique et les tags de script s'exécutent.
Essayez d'utiliser JQuery si cela ne fonctionne pas en utilisant javascript simple.