marc(..): Warum nur NN WARUM...?? *schluchz*

Hi Forum...

Folgendes "Ding", was ich mir nicht erklaeren kann, ist mir gerade passiert....

NN 4.7 meldete mir urploetzlich den Fehler, dass er eine JavaScript-Funktion nicht finden wuerde. Bis zu diesem Zeitpunkt hatte er kein einziges Problem mit dieser Funktion gehabt, welche in einem if(document.layers) Block liegt. Nachdem ich mich ne halbe Stunde damit auseinandergesetzt hatte fand ich den vermeindlichen Fehler (<- und zwar auch nur durch zieloses Rumprobieren).
NN kam mit 2 Zeilen nicht klar...
1. document.all.divname.style.left = "49%";
2. document.all.divnmae2.style.height = (0.58 * variable);
(prinzipiell ja schon klar, aber ...->)
Die 3 (fuer mich) unglaublichen  Dinger sind:

1. Die beiden Befehle liegen in einem if(document.all) Block, in dem NN auch nicht irgendwie durch ein Hintertuerchen hineingelangte (<- mit alert abgefragt)
2. ...und das finde ich ist der Oberhammer: NN lief nur wenn ich diese Zeilen jeweils mit /* */ auskommentiert habe. Wenn ich beide Zeilen mit // auskommentierte bekam ich immer noch oben genannten Fehler.
3. Hat sich die ganze Sache nach ner weiteren halben Stunde fluchen + schreien scheints in Luft aufgeloest, ich bin mir zumindest nicht bewusst was ich da geaendert hab das es nun wieder funktioniert...

Vielleicht kann mir ja irgendjemand einen Anhaltspunkt geben woran das gelegen haben koennte...
... denn ich hab vollkommen ganz und gar keine Ahnung!!

Gruss und Dank
marc(..)

PS.: Auch diese Erfahrung kann meine NN Ueberzeugtheit (fast) nicht erschuettern  ;)

  1. Hallo Marc!

    NN kam mit 2 Zeilen nicht klar...

    1. document.all.divname.style.left = "49%";
    2. document.all.divnmae2.style.height = (0.58 * variable);

    ducument.all ist der Sytax vom Microsoft und damit vom IE.
    NS kennt kein document.all.

    Du fragast auch nur IE mit if (document.all) ab. Für NS muss du if(document.layers) abfragen. Der Sytax wäre also: document.layers.divname.left =

    Lese dir mal die Bereiche in der Auslese durch:

    <../../sfausles/tsfa_tc.htm>
    <../../sfausles/tsfa_td.htm>

    Besonders aber <../../sfausles/tsfa_tda.htm#a1> und dan im Selfhtml: <../../tfbe.htm>

    Die werden dir den nötigen Durchblick verschaffen.

    Grüße
    Thomas

    1. Ja was sehen meine Augen da !!

      univie.ac.at - Herr Kollege oder Herr Professor ? - Welches Fach ?

      Grüsse ,
      Bernhard

  2. Hi,

    1. Die beiden Befehle liegen in einem if(document.all) Block, in dem NN auch nicht irgendwie durch ein Hintertuerchen hineingelangte (<- mit alert abgefragt)

    [...]

    URL?

    Cheatah

  3. Hi marc(..)

    In einem Posting von Antje habe ich neulich mal gelesen, das 0 Bytes merkwürdige Effekte im Netscape
    hervorrufen können.

    kurzer Test:

    <html>
    <script>
    if(document.all)
    {
         umpf=3;
    //  ^---- setz hier mal ein 0x00 Byte mit dem Hex-Editor deiner Wahl hin
    }
    </script>
    Hallo Welt
    </html>

    und dann mal mit // auskommentiert (immer noch Fehler), mit /* */ auskommentiert -> Fehler weg.

    Sobald da wieder ein Leerzeichen steht ist alles wieder ok.

    Im UltraEdit kann ich keinen Unterschied zwischen 0x00 und 0x20 sehen (ausser im Hex Modus (STRG-H)), allerdings ersetzt er die Null-Zeichen sehr schnell wieder durch richtige Leerzeichen.

    Sieht das so aus als ob es das gewesen sein könnte?

    Gruss,
    Carsten

    1. Hi Carsten

      Sieht das so aus als ob es das gewesen sein könnte?

      Ja das sieht so  aus :)
      Leider ist das nicht mehr wirklich nachzuvollziehen, da ich die FehlerDatei nicht mehr hab, aber setzt wo Du es sagtst: Ich glaub ich habe irgendwo ein Tab geloescht und ein paar LeerDINGER (<- aus lauter Verzweifelung) und dann hats wieder funktoniert.......
      Hast nicht rein zufaellig unausloeschlich in Deinem Hirn die genaue URL von dem Artikel (<- jaja schon gut, war nur Wunschdenken. Geh ja schon suchen  ;)

      Auf jeden Fall hab ich jetzt ansatzweise einen Ansatzpunkt.... Dank ;)

      Gruss
      marc(..)

    2. Hallo!

      if(document.all)
      {
           umpf=3;
      //  ^---- setz hier mal ein 0x00 Byte mit dem Hex-Editor deiner Wahl hin
      }

      und dann mal mit // auskommentiert (immer noch Fehler), mit /* */ auskommentiert -> Fehler weg.
      Sobald da wieder ein Leerzeichen steht ist alles wieder ok.

      Das ist einigermassen erklaerbar. In C und anderen Programmiersprachen gibt es keine Strings in dem Sinne, wie man es von den higher level Scriptsprachen (z.B. JavaScript) kennt. Strings werden dort als Arrays von Bytes abgelegt, und das Ende eines Strings wird dann mit dem Byte 0x00 markiert. Je nachdem, wie genau der Scripttext nun im Speicher abgelegt wird (um dann interpretiert zu werden), kann dieses ueberfluessige 0x00 als Zeilenende interpretiert werden, womit natuerlich an dieser Stelle die Wirkung des // beendet wird.

      Ob das so ok ist oder als Bug zu betrachten ist, weiss ich nicht. Auf jeden Fall frage ich mich aber, wie man auf die Idee kommt, solche Zeichen ueberhaupt einzugeben (betrifft auch die Steuerzeichen (ASCII < 32)).

      Im UltraEdit kann ich keinen Unterschied zwischen 0x00 und 0x20 sehen (ausser im Hex Modus (STRG-H)), allerdings ersetzt er die Null-Zeichen sehr schnell wieder durch richtige Leerzeichen.

      Falls ein 0x00 ueberhaupt mal dargestellt werden muss (was kaum vorkommen sollte), so sieht es gewoehnlich genauso aus wie ein Leerzeichen, ausser natuerlich, der Editor kennzeichnet dies extra. Ausserdem wandeln viele Editoren beim Speichern - oder auch schon eher - die Null-Character in Leerzeichen um. Textpad gibt beim Oeffnen einer Datei mit Null-Characters eine Warnung aus (Verdacht auf Binaerdatei).

      So long