Verschachtelung bzw. <script></script> in document.writeln
Eric
- javascript
Hallo!
Ich habe folgendes Problem. Mein Quelltext sieht so aus:
<script language=JavaScript>
function zufall(){
a=Math.random();
a*=3;
a=Math.ceil(a);
alert(a);}
</script>
<script language=JavaScript>
function test(){
if (a==1)
{
document.writeln("<head><script language=JavaScript src=test.js></script></head><body bgcolor=#00CBFE<form><b>1. Was kann man sprichwörtlich versetzen?</b><p><input type=radio value=a onClick='Engine(1, this.value)' >sitzenbleiben<br><input type=radio value=b onClick='Engine(1, this.value)'>Zäune<br><input type=radio value=c onClick='Engine(1, this.value)'>Berge<br><input type=radio value=d onClick='Engine(1, this.value)'>Freundin<p></tr></table</form></body>");
}
if (a==2){
document.writeln("<body bgcolor=yellow>Hallo");
}
if (a==3)
{document.writeln("<body bgcolor=red>");
}
}
</script>
Ich hab erst ne Zufallszahl erstellt und dann jeder Zahl ein Ereignis zugeordnet. Jedoch funktioniert dies nicht, da ich in document.writeln ein <script></script> eingefügt habe und so das Programm denkt, das Script sei abgeschlossen. Wie kann ich trotzdem das externe Skript aufrufen??
Ich würde mich echt freuen, wenn mir da jemand weiterhelfen könnte.
Ciao
Eric
Tach,
die Zeichenfolge </ beendet den Inhalt einer Script-Section.
Daher ist das innerhalb eines Strings als </ zu schreiben.
Viele Browser haben hier einen Bug und betrachten die Script-Section erst beim Auftreten von </script> als beendet, aber </ ist offiziell bereits das Ende.
Andreas
Hi,
eine Möglichkeit, die ich schon gesehen habe ist z.B.:
document.write("</scr");
document.write("ipt>");
Besser:
document.write("</script>");
Stichwort: Maskieren.
Grüße,
Ronny
Hi,
Tach,
eine Möglichkeit, die ich schon gesehen habe ist z.B.:
document.write("</scr");
document.write("ipt>");
Falsch. Wenn dann
document.write("<");
document.write("/script>");
Denn es ist die Zeichenfolge
</
die kritisch ist, nicht
</script>
Andreas
Hi,
eine Möglichkeit, die ich schon gesehen habe ist z.B.:
document.write("</scr");
document.write("ipt>");
Falsch. Wenn dann
document.write("<");
document.write("/script>");
Denn es ist die Zeichenfolge
</
die kritisch ist, nicht
</script>
Ah ja. Okay, ich hab es ja nur so gesehen. Aber das mit dem maskieren geht, oder?
Ronny
Hi,
Tach,
Ah ja. Okay, ich hab es ja nur so gesehen. Aber das mit dem maskieren geht, oder?
Entscheidend ist, daß die Zeichenfolge </ nicht vorkommt.
Daß Entities in Script-sections geparst werden dürfen, würde ich bezweifeln, bin mir aber nicht 100% sicher. Eigentlich dürften sie nicht geparst werden, denn der Inhalt von script ist CDATA (im Gegensatz zu PCDATA = parsed CDATA).
Falls sie nicht geparst werden dürfen, ist "</script" nicht zulässig. Und davon gehe ich eigentlich aus.
Andreas