11521 sujets

JavaScript, DOM et API Web HTML5

Bonsoir à tous
J'ai une commande AJAX qui va chercher le contenu d'une balise <aside> dans un fichier extérieur.
Quand je copie le résultat, qui comprend un appel à un <script>, celui ci n'est pas exécuté.
Y a-t-il un moyen de faire exécuter un script dans une balise importée?
Merci de m'éclairer de vos lumières
Modérateur
Bonjour,

ce que tu recherches est une incarnation du mal, eval

Il te faut récupérer le contenu de <script> et le passer à eval, le plus simple étant d'avoir un id sur la balise script., mais sinon comme ceci:


<div id="content">
</div>
<script>
  // chaine retournée par ajax:
  var ret = '<h1>Yo</h1><script>alert("yo");<'+'/script>';
  var content = document.getElementById('content');
  content.innerHTML = ret;
  var scripts = content.getElementsByTagName("script");
  for (var i=0; i<scripts.length; i++){
    eval(scripts[i].innerText);
  }
</script>


Par contre attention, cela peut permettre à plein d'attaques (vol de session et autres).
Modifié par kustolovic (16 May 2019 - 10:01)
Oui, c'est le genre de choses à ne pas faire.

Mon script va chercher un nœud dans un document et l'insère dans la page en cours. S'il n'y a que du HTML dans le nœud, pas de problème, mais je suis tombé sur un nœud qui contenait un appel à un script, d'où ma question.

J'ai pensé à une autre solution:
au lieu d'aller chercher le contenu du nœud en AJAX, j'ouvre une <iframe> (avec display:none) sur une page qui contient le nœud, je fais un clone du nœud dans le document et je l'insère au bon endroit.

Je suis bien entendu preneur de meilleures solutions, il doit certainement y en avoir dans la boîte à outils de certains.
Modifié par PapyJP (16 May 2019 - 16:46)