Kess: Script wird einmal aufgreufen und von NS zwei mal gestartet.

Liebe Forumer,

es ist spät und vielleicht bin ich auch nur müde. Müde allerdings von stundenlanger Fehlersuche. Inzwischen habe ich kapituliert und brauche einen Rat:

In einem Frame lade ich wiederum ein Frameset, in dessen einem Frame eine Navigationsleiste Dynamisch aufgebaut wird und sofort der erste Themenbereich in das andere Frame geladen wird.
Die Navigationsleiste zieht zum einen eine extrerne JavaScript Datei mit allgemeinen Funktionen an und definiert und belegt im Header außerdem mehrere Variablen für diese Funktionen. Außerdem wird sofort ein Script aus der externen Datei aufgerufen, das dynamisch StyleSheet-Anweisungen in den Header schreibt.
Im Body Teil werden erneut Funktionen aus der externen Datei aufgerufen, die dynamisch den Inhalt schreiben: Layer definieren, ausblenden und nur den ersten anzeigen, sowie die dazu passende Datei in das andere Frame laden.

So weit läuft auch alles ganz prima. Nur daß Netscape die erste Funktion zur Definition der StyleSheets nicht einmal, sondern zwei mal ausführt.
Die Angaben werden sowohl in den Header als auch zwischen Header und und Body geschrieben. Das kann keine fehlerhafte Anzeige des Sourcecode-Viewers sein, denn mittels einer Alert-Anweisung habe ich ermittelt, daß das Script vom IE wirklich nur einmal und vom NS tatsächlich zwei mal gestartet wird.

Ich habe weder eine Schleife im Code, noch zwei Aufrufe. Ich habe sämtlich Projektdateien durchsucht.

Ist ein solches Verhalten bekannt ?
Wenn ja, gibt es dafür eine Lösung ?

Viele Grüße
Kess

P.S. Die Dateien stehen nicht im Netz, ich kann sie bei Bedarf bereitstellen.

  1. Der Code ist nun online unter http://www.homepages.de/home/kess/index.htm
    im Menü auf 'Treffen' klicken und dann oben in den gelben Bereich den Code ansehen.

    Das ganze ist eine sehr frühe Version und noch in Entwicklung. Es existieren viele offene Enden.

    Unter News ist ein vergleichbarer Ablauf zu sehen, der - zumindest bei mir - funktioniert.

    Gruß
    Kess

    1. Moin Kess,

      Der Code ist nun online unter http://www.homepages.de/home/kess/index.htm
      im Menü auf 'Treffen' klicken und dann oben in den gelben Bereich den Code ansehen.

      hm... irgendwie finde ich in der Vielzahl der Dateien nicht die entscheidende Stelle. Irgendwo wird eine JavaScript-Funktion "cellWrite();" und dann "document.write(dsource);" aufgerufen. Soll dort das stylesheet generiert werden - und wenn ja, wo kann man diese Funktion finden? Oder ist es jetzt einfach zu spät für mich? <g>.

      Bis dannundwann....

      Andreas

      1. Danke Andreas. Und erst einmal Sorry, daß ich mich nicht eher melde. Gestern bin ich zu nichts gekommen un jetzt steht erst einmal die Arbeit an. Vielleicht ist es ganz gut, von dem Problem erst einmal Abstand zu bekommen. Am Sa. abend habe ich nur noch Buchstaben gesehen, da schleichen sich schnell Fehler ein.

        Die entscheidenden Dateien sind:
        tframes.htm - das innere Framset
        treffo.htm - die fehlerhafte Navigationsleiste
        s3t_1.js - die JavaScript Funktionen

        Hier der betreffende Code:

        function cellDisp(cellnr) {
          if ( cellnr < 0 cellnr > maxcell ) {
            alert('Es sind keine weiteren Informationen vorhanden.');
          }
          else {
            cellHide();
            name = 'c' + cellnr;
            if (document.layers) {
              document.layers[''+name].visibility = "show";
            }
            if (document.all) {
              document.all[''+name].style.visibility = "visible";
            }
            eval('parent.trefft.location.href = "' + cell[cellnr][1] + '";');
          }
        }

        function cellHide() {
          for (hi = (maxcell - 1); hi >= 0; hi-- ) {
            name = 'c' + hi;
            if (document.layers) {
              document.layers[''+name].visibility = "hide";
            }
            if (document.all) {
              document.all[''+name].style.visibility = "hidden";
            }
          }
        }

        function cellStyle() {
        alert('start');
          maxcell = cell.length;
          dsource = '<STYLE type="text/css">\n' +
                    'td  {font-family:Arial; font-size:10pt; line-height:14pt; font-weight:bold; color:#993300; ' +
                    ' text-align:center;} \n';
          for (hi = (maxcell - 1); hi >= 0; hi-- ) {
            dsource += '#c' + hi + ' {position: absolute; top: 0px; height: 60px; width: 100%; text-align:center; ' +
                       'visibility: hidden;} \n';
          }
          dsource += '</STYLE>';
          document.write(dsource);
        }

        function cellWrite() {
          for (hi = (maxcell - 1); hi >= 0; hi-- ) {
            dsource += '<div id="c' + hi + '">' +
                       '<table border="0"><tr>\n<td valign="center" align="right">' +
                       '<a href="javascript:alert('back')">' +
                       '<img src="../Pictures/prev.gif" width="20" height="17" border="0" ' +
                       'alt="' + cellprev + '"></a>' +
                       '</td>\n<td width="100"> </td>\n' +
                       '<td valign="center" align="left">' +
                       '<a href="javascript:alert('weiter')">' +
                       '<img src="../Pictures/next.gif" width="20" height="19" border="0" ' +
                       'alt="' + cellnext + '"></a>' +
                       '</td>\n</tr></table></div>';
          }
        }

        ---
        Inhalt von treffo.htm:

        <HTML>

        <HEAD>
        <TITLE>Der Siedler-Treffpunkt: Siedler-Treffen Rückblick</TITLE>
        <script language="JavaScript" src="../script/s3t_1.js" type="text/javascript"></script>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
        <META NAME="robots" CONTENT="noindex,nofollow">
        <script language="JavaScript">
        var cellnext,cellprev,dsource,hi,maxcell;
        cell = new Array();

        cell[0] = new Array(2);
        cell[0][0] = "Das 1. Treffen<br>27. Januar 1999"
        cell[0][1] = "Treff1/S3index.htm"

        cell[1] = new Array(2);
        cell[1][0] = "Frankfurt am Main<br>3. April 1999"
        cell[1][1] = "Treff2/Treff2_1.htm"

        cell[2] = new Array(2);
        cell[2][0] = "Düsseldorf<br>15. Mai 1999"
        cell[2][1] = "Treff3/Treff3_1.htm"

        cell[3] = new Array(2);
        cell[3][0] = "Wien<br>9./10. Juli 1999"
        cell[3][1] = "Treff4/Treff4_1.htm"

        cell[4] = new Array(2);
        cell[4][0] = "Groß-Gerau<br>18. September 1999"
        cell[4][1] = "Treff5/Treff5_1.htm"

        cellnext = "weitere Treffen";
        cellprev = "zurückliegende Treffen";

        cellStyle();
        </script>
        </HEAD>

        <!--- Der Siedler-Treffpunkt, http://www.siedler3.firstpage.de --->

        <BODY bgcolor="#F8D8A8">

        <!--- Der Siedler-Treffpunkt. Neues und Informationen rund um Die Siedler: Ereignisse, Fan-Treffen, Lan-Parties
          , Best of Chat, Best of Forum, Baggers Guide und vieles mehr.
          copyright by Kess@topmail.de
        //--->

        <script language="JavaScript">
        cellWrite();
        document.write(dsource);
        cellDisp(maxcell - 1);
        </script>
         
        </BODY>

        </HTML>

        Viele Grüße
        Kess

        1. Vielen Dank allen, die mir zu helfen versucht haben. Beim nochmaligen durchlesen meines letzten Postings ist es mir aufgefallen. Natürlich liegt der Fehler bei mir, :-( und *uff*
          Schuld ist ein kleines '+'-Zeichen in cellWrite() : dsource += ...
          dscource enthält aus cellStyle() noch die CSS-Definitionen.

          function cellWrite() {
            for (hi = (maxcell - 1); hi >= 0; hi-- ) {
              dsource += '<div id="c' + hi + '">' + ...

          Viele Grüße
          Kess

          1. Moin Kess,

            Ich hab neugierigerweise nochmal geguckt, der <style>-Bereich wurde bei mir immer noch doppelt im Quellcode ausgegeben. Mir fielen nämlich folgende Stellen auf:

            --> Aus Deinem letzten Posting (function cellStyle()...): <--

            ...
              dsource += '</STYLE>';
              document.write(dsource);
            ...

            --> Aus dem Quellcode von Deiner treffo.htm: <--

            ...
            cellStyle();

            </script>
            </HEAD>

            <!--- Der Siedler-Treffpunkt, http://www.siedler3.firstpage.de --->

            <BODY bgcolor="#F8D8A8">

            <!--- Der Siedler-Treffpunkt. Neues und Informationen rund um Die Siedler: Ereignisse, > Fan-Treffen, Lan-Parties
               , Best of Chat, Best of Forum, Baggers Guide und vieles mehr.
               copyright by Kess@topmail.de
            //--->

            <script language="JavaScript">

            cellWrite();
            document.write(dsource);
            ...

            d.h. "document.write(dsource);" steht einmal innerhalb der Funktion cellStyle() und ein zweites mal außerhalb. Soll das so sein oder hab ich da irgendwas übersehen?

            Bis dannundwann

            Andreas

            1. Dein Sorge ist lieb, Andreas. Doch es hat sich wirklich erledigt. Der Code befand sich noch in der Entwicklung und enthielt mehrere Unsauberkeiten, wie Du festgestellt hast. Inwischen ist jedoch alles behoben und läuft prima. Document.write befindet sich nun auch dort, wo es hingehört - innerhalb der Funktion. Das zweite Write schrieb übrigens nicht den Style-Bereich sondern den Body, nur daß durch fehlende Initialisierung noch der Style-Bereich mit in der Variable enthalten war und somit noch ein zweites Masl geschrieben wurde.

              Ich wollte Euch nicht mit Details langweilen und habe deshalb nur den Kern der Problems beschrieben. Man sollte eben nicht vergessen Variablen zu initialisieren.

              Viele liebe Grüße
              Kess

    2. Morgen Kess!

      Kein Zoff am Fruehstueckstisch bekommen? ;-)

      Also die alert-Box kommt bei mir nur einmal. Haette mir aber auch gestern schon auffallen koennen, denn die Fehlermeldung (document.layers["" + name] has no properties, uebrigens in Zeile 23 von s3t_1.js) kommt auch nur einmal. Der geschriebene HTML-Code (beginnend mit <DIV id="c4">) faengt bei mir aber auch erst nach dem </HTML> an. Vielleicht bringt es was, wenn Du in den Scriptbereich noch die Kommentarzeichen reinmachst.

      Wenn sich das mit dem doppelten Ausfuehren so absolut nicht abstellen laesst, koenntest Du vielleicht versuchen, eine Variable zu setzen und daran zu erkennen, ob der Code schon mal ausgefuehrt wurde. Das heisst, wenn sie vor der zweiten Ausfuehrung nicht zurueckgesetzt wird.

      So long, Calocybe