Eternius: innerHTML mit </script> Problem

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

--
no strict;
no warnings;
  1. 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

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

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      1. 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

        --
        no strict;
        no warnings;
        man google
  2. 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

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

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. 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