Eric: Verschachtelung bzw. <script></script> in document.writeln

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

  1. 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

  2. Hi,

    eine Möglichkeit, die ich schon gesehen habe ist z.B.:

    document.write("</scr");
    document.write("ipt>");

    Besser:
    document.write("&lt/script&gt");

    Stichwort: Maskieren.

    Grüße,

    Ronny

    1. 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

      1. 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

        1. 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