Antje Hofmann: JS-DOM: Script Tag schreiben und IE

Beitrag lesen

Hallo Stefan,

ich versuche per JS-DOM ein Script Tag zur Laufzeit zu schreiben. Nachfolgender Code läuft im Mozilla einwandfrei, nicht jedoch im IE.

Jemand eine Idee?

:-) Ja

newscript=document.createElement("script");
newscript.appendChild(newtxt);

ein Blick in die Microsoft-Doku half da weiter:

appendChild kennen im IE nur die Elemente "A, ACRONYM, ADDRESS, attribute, B, BDO, BIG, BLOCKQUOTE, BODY, BUTTON, CAPTION, CENTER, CITE, CODE, COL, COLGROUP, COMMENT, DD, DEL, DFN, DIR, DIV, DL, DT, EM, FIELDSET, FONT, FORM, FRAMESET, HEAD, hn, HTML, I, IFRAME, INPUT type=button, INPUT type=checkbox, INPUT type=file, INPUT type=image, INPUT type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text, INS, KBD, LABEL, LEGEND, LI, LISTING, MAP, MARQUEE, MENU, nextID, OL, OPTION, P, PLAINTEXT, PRE, Q, S, SAMP, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TABLE, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TR, TT, U, UL, VAR, XMP"

wie du siehst, gehört der Scripttag nicht dazu. Allerdings gibt es Lösungen für dein Problem und zwar eine ganze Menge:

Eine Lösung, die deinen Ansatz berücksichtigt könnte sein:

function add_script(){
newscript=document.createElement("script");
newscript.text= "function alarm() {alert('cool');}"
document.getElementById("docbody").appendChild(newscript);
}

tatsächlich ist es aber so, dass du im Grunde überhaupt kein neues Scriptelement benötigst. Was du brauchst ist die Möglichkeit eine Funktion zur Laufzeit zu erzeugen.

Das ist mit JavaScript überhaupt kein Problem, wie dir das folgende Beispiel zeigt:

<html>
<head>
<title>Funktionen erzeugen</title>
<script type="text/javascript">
<!--

function add_script()
{
 alarm  = new Function("alert('cool');");
 alarm2 = function(){alert('cool 2');}
 alarm3 = function cool(){alert('cool 3');}
 alarm4  = new Function("x","y","alert(x*y);");
 alarm5 = function(x,y){alert(x-y);}
 alarm6 = function plus(x,y){alert(x+y);}
}

//-->
</script>
</head>
<body >
<script type="text/javascript">
<!--
 add_script()
 alarm()
 alarm2();
 alarm3();
 alarm4(1,2)
 alarm5(1,2);
 alarm6(1,2);
//-->
</script>
</body>
</html>

Der Vorteil, es ist einfach, unkompliziert und das verstehen eigentlich alle Browser ab Version 4.

Übrigens, vor dem schließenden Kommentar im Scripttag muss ein JavaScriptkommentar // stehen, damit der Interpreter den nachfolgenden HTML-Kommentar ignoriert.

Viele Grüße

Antje