molily: Dekodiertes Script ausführen

Beitrag lesen

Hallo,

Wenn ich das richtig interpretiere, dann muss ich "text" parsen, um an der passenden Stelle

var script = document.createElement("script");

script.type  = "text/javascript";
script.text  = "meine_function();"
document.getElementById(id).appendChild(script);


> einzufügen. Und ohne parsen geht das schlicht nicht, oder?  
  
Du musst nicht selbst parsen, das erledigt ja der Browser für dich, wenn du `innerHTML = "<p>…<script>…</script>…</p>"`{:.language-javascript} zuweist. Die Script-Elemente existieren schon im DOM, der Code darin wurde nur nicht ausgeführt.  
  
Du musst nach dem innerHTML nur alle script-Elemente unterhalb des betroffenen Elements suchen (z.B. mit `element.getElementsByTagName('script')`{:.language-javascript}) und diese mit eval() ausführen.  
  
So macht es übrigens auch jQuerys html()-funktion ([intern domManip](https://github.com/jquery/jquery/blob/2.0.3/src/manipulation.js#L228-L270)).  
  
Man sollte außerdem ein globales eval() verwenden, sonst sind in dem Code nämlich noch lokale Variablen verfügbar. In neueren Browsern reicht es, `(1,eval)("code");`{:.language-javascript} zu schreiben.  
  
Hintergrund: <http://perfectionkills.com/global-eval-what-are-the-options/>  
jQuery hat dazu auch eine Helferfunktion: <http://api.jquery.com/jQuery.globalEval/>  
  
Mathias