innerHTML mit </script> Problem
Eternius
- javascript
0 eisbaer040 ziegenmelker0 MudGuard
Hallo,
ich habe folgendes Problem:
ich versuche einem div
<div id="content"></div>
das innerHTML zuzuweisen.
Folgendermassen funktioniert es:
[..].contentDocument.getElementById("content").innerHTML="neuerinhalt";
mein problem:
ich würde dort gern javascript hineinbasteln
[..].contentDocument.getElementById("content").innerHTML="<script>alert('hallo'); </script>\n ";
jedoch kriege ich mit moz einen "nicht abgeschlossene Zeichenfolge" Fehler.
Bzw wenn ich mir den quelltext angucke, dann wird in der Zeichenfolge </script> als Bestandteil des existierenden Sourcecodes angesehen.
</script> etc brachten auch keine Erfolge.
Funktioniert:
<html>
<div id="content">asdf</div>
<script language="javascript">
document.getElementById('content').innerHTML='neuerinhalt';
</script>
</html>
Funktioniert nicht:
<html>
<div id="content">asdf</div>
<script language="javascript">
document.getElementById('content').innerHTML='<script language="javascript">alert("hallo");</script>';
</script>
</html>
--> Error: unterminated string literal
Source File: file:///C:/Dokumente%20und%20Einstellungen/xg04123/Desktop/java/blub.html
Line: 4, Column: 45
Source Code:
document.getElementById('content').innerHTML='<script language="javascript">alert("hallo");
und ergibt folgenden Text im Browser:
asdf
';
Danke
Eternius
Hi,
Funktioniert nicht:
<html>
<div id="content">asdf</div>
<script language="javascript">
document.getElementById('content').innerHTML='<script language="javascript">alert("hallo");</script>';
</script>
</html>--> Error: unterminated string literal
Das Problem ist, dass dein Scriptbereich nur bis zum ersten </script> geht, was der Parser findet! Das dieses nun aber in einem String steht, bemerkt er nicht. Für den Parser ist das Javascript nach ("hallo"); abgeschlossen. Somit fehlt ihm ein Stringabschluss ';
Lösung:
Du must das </script> aufteilen:
<html>
<div id="content">asdf</div>
<script language="javascript">
document.getElementById('content').innerHTML='<script language="javascript">alert("hallo");</scr'+'ipt>';
</script>
</html>
eb4
hi,
Lösung:
Du must das </script> aufteilen:document.getElementById('content').innerHTML='<script language="javascript">alert("hallo");</scr'+'ipt>';
wobei das </ hier immer noch als </ maskiert werden muss, denn schon allein </ beendet den scriptbereich implizit.
gruß,
wahsaga
Hallo,
danke euch beiden :)
jetzt wird es zumindest korrekt ins div hineingeschrieben, aber
der browser führt den dynamischen code nicht aus.
werd mir wohl was anderes überlegen müssen
Gruss
Hallo,
Hallo,
ich versuche einem div
<div id="content"></div>
das innerHTML zuzuweisen.
ich würde dort gern javascript hineinbasteln
das ist imho nicht zulässig. <script> Tags sind nur im <head> oder <body> Bereich zulässig.
http://www.w3.org/TR/html401/interact/scripts.html#edef-SCRIPT
<script language="javascript">
Hier fehlt das type-Attribut, das language-Attribut ist überflüssig/veraltet(depreciated).
http://www.w3.org/TR/html401/interact/scripts.html#edef-SCRIPT
Danke
Eternius
MfG, ziegenmelker
Hi,
das ist imho nicht zulässig. <script> Tags sind nur im <head> oder <body> Bereich zulässig.
Deine Meinung solltest Du ändern. Kurzer Ausschnitt aus der HTML-4.01 strict DTD:
<!ENTITY % special
"A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">
<!-- %inline; covers inline or "text-level" elements -->
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Das zeigt schon mal, daß script-Elemente überall zulässig sind, wo inline-Elemente zugelassen sind.
<!ELEMENT BLOCKQUOTE - - (%block;|SCRIPT)+ -- long quotation -->
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
sind weitere Stellen, die zeigen, daß script-Elemente nicht direkte Kinder von body oder head sein müssen.
cu,
Andreas
Hi,
Hi,
sind weitere Stellen, die zeigen, daß script-Elemente nicht direkte Kinder von body oder head sein müssen.
thx, man lernt halt nie aus ;-)
cu,
Andreas
cu, ziegenmelker