isotoxin: --» in zeichenkette

hi
ich habs nicht ausprobiert weil ich ehrlich gar nich weiss wo man das javascript im browser abstellen kann aber wenn man ein script wie dieses in einer html datei hat:
<script language="JavaScript"><!--
var test = "-->";
alert(test);
//--></script>
und der browser kann kein javascript oder es is abgestellt, dann steht doch nacher an der stelle folgendes:
";
alert(test);
//-->
oder?
gibts eine andere möglichkeit das zu maskieren ausser die entsprechende zeichenfolge an der stelle zu unterbrechen und zu addieren - also nicht so:
var test = "--" + ">";
gibts ne möglichkeit?
danke
cu

  1. Hi
    Zuerstmal ne Erklaerung wie man Javascript ab/anschalten kann:
    IE:
    1. Ansicht (IE4) / Extras (IE5)
    2. Internet Optionen
    3. Sicherheitseinstellungen
    4. Internet
    5. Stufe Anpassen
    6. ActiveScripting Aktivieren
    7. Auf die Reload-Taste klicken.
    Netscape:
    1. Bearbeiten
    2. Einstellungen
    3. Erweitert
    4. Javascript aktivieren<
    5. Auf die Reload-Taste klicken.
    Zur Frage: Nein, da ist keine addition noetig, da
    1. die Schlussmarkierung nicht --> sondern //--> heisst!
    2. Auch wenn du test="//-->" schreibst keine Probleme entstehen.
    Tschau Holger

    1. hi

      Zur Frage: Nein, da ist keine addition noetig, da

      1. die Schlussmarkierung nicht --> sondern //--> heisst!
      2. Auch wenn du test="//-->" schreibst keine Probleme entstehen.

      das kann nicht ganz richtig sein!
      zum schluss steht nur //--> damit es in javascript als kommentar angesehen wird!! die beiden // lassen javascript das --> ignorieren, damit es nicht zu einem fehler kommt
      in html wird alles was zwischen <!-- und --> steht ignoriert - so funktioniert das auch bei älteren browsern und möglicherweise ist ein browser in dem javascript abgestellt wurde wenigstens noch so schlau dass er dann alles zwischen <script> und </script> ignoriert aber ein älterer browser kennt <script> ja gar nicht!!
      das heisst ich bin 99% sicher dass der ältere browser dann die zu ignorierende stelle frühzeitig abbricht und den rest ausgiebt
      meiner meinung nach ist 1. falsch da --> die schlussmarkierung ist und // nur zum ignorieren führt und 2. ist nur bei browsern richtig die javascript können!

      cu

      1. Hi Iso!

        zum schluss steht nur //--> damit es in javascript als kommentar angesehen wird!! die beiden // lassen javascript das --> ignorieren, damit es nicht zu einem fehler kommt

        Da hast Du voellig recht. Bei anderen Sprachen als JavaScript maskiert man auch nicht mit //, sondern z.B. mit # in PerlScript oder mit ' in Basic, also #--> bzw. '-->. Leider finde ich jetzt den Beitrag im Archiv nicht mehr, wo ich das schonmal dargelegt hatte. D.h. auch, dass zwischen // und --> noch andere Dinge stehen koennen, z.B.
          // kommen wir nun zum Ende: -->

        in html wird alles was zwischen <!-- und --> steht ignoriert - so funktioniert das auch bei älteren browsern und möglicherweise ist ein browser in dem javascript abgestellt wurde wenigstens noch so schlau dass er dann alles zwischen <script> und </script> ignoriert aber ein älterer browser kennt <script> ja gar nicht!!

        Das ist ein bisschen kompliziert. Der Script-Bereich endet beim ersten auftreten von </ , was dann gefaelligst auch wirklich zu einem </script> gehoeren sollte, wenn die HTML-Datei valid sein soll. Deshalb muss man *alle* Vorkommen von </ im Script maskieren, z.B. auch </p> -> </p>. Im Archiv findest Du sicher ein paar Links auf die entsprechenden Stellen in der HTML-Spec.

        das heisst ich bin 99% sicher dass der ältere browser dann die zu ignorierende stelle frühzeitig abbricht und den rest ausgiebt

        Klingt nur logisch.

        So long, ich muss jetzt mal kurz nach Berlin

        1. hi

          D.h. auch, dass zwischen // und --> noch andere Dinge stehen koennen, z.B.
            // kommen wir nun zum Ende: -->

          100% richtig - da bin ich mir sicher!

          es sollte auch eigentlich damit wirklich alles ignoriert wird das <!-- sofort nach <script> folgen und nach --> sollte dann auch sofort </script> kommen denn wenn noch ein umbruch oder was ähnliches zwischen drinn kommt kann das bei älteren browsern auch zu fehlanzeigen führen!!

          beispiel:

          abc<script><!--
          alert();
          //--></script>def

          gibt bei alten und neuen browsern "abcdef" aus

          abc<script>
          <!--
          alert();
          //-->
          </script>def

          gibt bei neuen browsern "abcdef" aus und bei alten "abc def"
          ich bin mir aber nur 99% sicher weil ichs nich ausprobiert hab und noch nirgendwo gelesen...

          cu

      2. Hi

        Zur Frage: Nein, da ist keine addition noetig, da

        1. die Schlussmarkierung nicht --> sondern //--> heisst!
        2. Auch wenn du test="//-->" schreibst keine Probleme entstehen.

        das kann nicht ganz richtig sein!
        zum schluss steht nur //--> damit es in javascript als kommentar angesehen wird!! die beiden // lassen javascript das --> ignorieren, damit es nicht zu einem fehler kommt
        in html wird alles was zwischen <!-- und --> steht ignoriert - so funktioniert das auch bei älteren browsern und möglicherweise ist ein browser in dem javascript abgestellt wurde wenigstens noch so schlau dass er dann alles zwischen <script> und </script> ignoriert aber ein älterer browser kennt <script> ja gar nicht!!
        das heisst ich bin 99% sicher dass der ältere browser dann die zu ignorierende stelle frühzeitig abbricht und den rest ausgiebt
        meiner meinung nach ist 1. falsch da --> die schlussmarkierung ist und // nur zum ignorieren führt und 2. ist nur bei browsern richtig die javascript können!

        Ja, Asche auf mein Haupt, du hast recht ;-)
        Ich hatte die Sache mit NS4.03 getestet, und da war es voellig egal ob ich ueberhaupt mit <!-- und --> oder gar nicht markiere, der Browser ignoriert einfach alles was zwischen <script> und </script> steht. Das gleiche passierte mit meinem IE 3, der wie ich dachte (Irgendwas war da mal mit denken und Pferdekoepfen oder so ;-) noch kein Javascript versteht. (Jedenfalls war ich zu bloed in den Einstellungen was zu Javascript zu finden, was mir aber jetzt gelungen ist:
        Fuer die die das auch suchen:
        1. Ansicht
        2. Optionen
        3. Sicherheit
        4. ActiveX-Scripts ausführen
        Meine Vermutung ist also, dass Browser die Javascript kennen keine Markierung mit <!-- und --> brauchen.
        Aber ob das bei allen Betriebssystemen und Javascriptfaehigen Browsern stimmt, kann ich leider nicht sagen, das waere aber interessant.
        Wenn das naemlich timmen wuerde, dann koennte man ohne grosse Probleme diese Markierung weglassen, weil mindestens 99% aller Surfer mit Javascriptfaehigen Browsern surfen.
        Tschau Holger

  2. Hi iso,

    [...] wenn man ein script wie dieses in einer html datei hat:

    <script language="JavaScript"><!--
    var test = "-->";
    alert(test);
    //--></script>
    und der browser kann kein javascript oder es is abgestellt,

    Da gibt es wohl einen Unterschied:

    o Der Browser kann Javascript aber es ist ausgeschaltet:
      Alles zwischen <script> und </script> wird ignoriert (weder  
      ausgeführt noch angezeigt).

    o Der Browser kann kein Javascript:
      Dann wird alles innerhalb von <script> und </script> angezeigt, weil
      der Browser das ihm unbekannte <tag> ignoriert. Schreib probehalber
      mal eine HTML-Datei ein der du ein Stück Text <kiwi> in ein
      'selbsterfundenes' </kiwi> Tag einsetzt. Der Text wird trotzdem
      angezeigt. Das ist oft sinnvoll, aber bestimmt nicht bei
      JavaScript-Bereichen. Deshalb setzt man das Script (oder die
      Styles) in Kommentare, damit das nicht passiert.

    »»  dann steht doch nacher an der stelle folgendes:

    ";
    alert(test);
    //-->
    oder?

    Bei einem Browser der das <script> Tag nicht kennt: Ja.
    Bei einem Browser der Javascript abgeschaltet hat: Nein

    gibts eine andere möglichkeit das zu maskieren ausser die entsprechende
    zeichenfolge an der stelle zu unterbrechen und zu addieren - also nicht so:
    var test = "--" + ">";
    gibts ne möglichkeit?

    Ja:
       var test = "-->";

    Der bekannte )* Fall diese Phänomens ist übrigens:
       document.write("</script>");
    Da erkennt der Browser ohne das \ ein Script-Ende. Böse Falle...
    (Für 'sauberen' Code müssen alle </ im Script-Bereich als </ geschrieben
    werden, ausser das echte </script> )

    cu
    Carsten

    )* heisst: den mit dem "-->" kannte ich noch nicht :-)

    P.S. Aussagen zum "dem Browser der kein <script> Tag" sind ist ungetestet,
    woher sollte ich den nehmen?

    1. hi

      danke erstmal

      var test = "-->";

      aha, wenn ich also von einem perl-script eine zeichenkette die zwischen zwei "" steht schreiben lasse dann sollte ich folgende zeichen ersetzen:

      \ durch \
      " durch "
      / durch /
      und

      durch >

      (es handelt sich um den wert eines input-tags - zeilenumbrüche sind also ausgeschlossen - sonst sollte ich diese durch \n ersetzen - klar)

      ist eigentlich auch < erlaubt?
      und ist es sinnvoll auch das einzusetzen?

      danke
      cu