Max: Globale Variable wird in Mozilla nicht erkannt!

Hallo.
Im Moment "muss" (ich machs freiwillig) ich für einen Lehrer von mir einen Kalender mit verschiedenen Pics-of-the-day basteln. Das Ding klappt auch bis jetzt ganz gut. Nur habe ich von ihm gehört, dass es unter Mozilla und Netscape nicht funktioniert. Genaue Browserversionen weiß ich momentan leider noch nicht.
Jetzt hatte ich gestern ein anderes Problem mit dem Kalender angesprochen, und nebenbei den Tipp bekommen, dass die Fehlermeldung in Mozilla folgende ist:

Error: AlleBilder is not defined
Source File: http://www.mastershrimp.com/kalender/Kalender.js
Line: 105

"AlleBilder" ist ein Array, der eine globale Variable ist. Im IE klappt das auch problemlos...nur halt bei den anderen nicht.
Könnte mir jemand, der Ahnung von den anderen Browsern hat, sagen, welche Elemente in meinem Code nicht browserunabhängig sind? Und am besten auch, wie man das Problem beseitigt.

Noch eine Frage: Wenn ich mir den Kalender mit dem IE im Internet ansehe, braucht der manchmal ewig (wenn er sich nicht sogar aufhängt) bis er die JS-Datei heruntergeladen hat...nach einem Klick auf "aktualisieren" läd er sie direkt. Was hab ich da wieder verbockt?

Links:
Link zum Kalender: http://www.mastershrimp.com/kalender/Kalender.html

Link zur externen JS-Datei: http://www.mastershrimp.com/kalender/Kalender.js

Vielen Dank schonmal!
Gruß

Max

  1. Hallo Max,

    Könnte mir jemand, der Ahnung von den anderen Browsern hat, sagen, welche Elemente in meinem Code nicht browserunabhängig sind? Und am besten auch, wie man das Problem beseitigt.

    Auf Zeile 88 bindest Du die Script-Datei noch einmal ein. Dies führt beim Mozilla dazu, dass er die Variable AlleBilder vergisst.

    Du bindest das Script außerdem so ein:

    ----------------------------------------------------------
    <script src="Kalender.js" type="text/javascript">
    </script>

    </head>

    <body onLoad="KalenderGenerate()" ...>
    ----------------------------------------------------------

    Warum rufst Du es nicht so auf?

    ----------------------------------------------------------
    <script src="Kalender.js" type="text/javascript">
    </script>

    </head>

    <body ...>

    <script type="text/javascript">
    KalenderGenerate();
    </script>
    ----------------------------------------------------------

    Die KalenderGenerate-Funktion sollte nun halt nicht mehr den kompletten Inhalt schreiben, sondern nur noch den Inhalt von <body>.

    Zur Verdeutlichung probiere doch mal folgende beiden Dateien aus:

    -------------------------------------------------------------
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <title>Test 1</title>
    <script type="text/javascript">
    function hallo () {
      document.writeln ('hallo welt');
    }
    </script>
    <body onload="hallo();">
    Dies ist ein Test<br>
    -------------------------------------------------------------

    -------------------------------------------------------------
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <title>Test 2</title>
    <script type="text/javascript">
    function hallo () {
      document.writeln ('hallo welt');
    }
    </script>
    Dies ist ein Test<br>
    <script type="text/javascript">
    hallo ();
    </script>
    -------------------------------------------------------------

    (der Kompaktheit halber habe ich optionale Start- und Endtags weggelassen)

    Noch eine Frage: Wenn ich mir den Kalender mit dem IE im Internet ansehe, braucht der manchmal ewig (wenn er sich nicht sogar aufhängt) bis er die JS-Datei heruntergeladen hat...

    Das könnte an der gleichen Ursache liegen wie das Mozilla-Problem.

    Viele Grüße,
    Christian

    1. Auf Zeile 88 bindest Du die Script-Datei noch einmal ein. Dies führt beim Mozilla dazu, dass er die Variable AlleBilder vergisst.

      Ich musste das machen, da er sonst beim Generieren des Kalenders die "Bild-Anzeige"-Funktion nicht mehr kennt. Er soll die Script-Datei nur in den Quelltext des Kalenders einbauen, damit ich die Bilder öffnen kann

      Habe auch mal die beiden Dateien von dir ausprobiert und verstanden was du meinst.
      Soll ich jetzt, um das Problem zu lösen, bei der Generierung des Kalenders die Einbindung der JS-Datei weglassen und statt dessen im HTML-Dokument die Funktion KalenderGenerate() so aufrufen, wie du es in deinem 2. Bsp. gemacht hast?
      Müsste dann alles klappen?
      Oder habe ich was falsch verstanden?

      Vielen Dank!
      Gruß

      Max

      1. Hallo Max,

        Soll ich jetzt, um das Problem zu lösen, bei der Generierung des Kalenders die Einbindung der JS-Datei weglassen und statt dessen im HTML-Dokument die Funktion KalenderGenerate() so aufrufen, wie du es in deinem 2. Bsp. gemacht hast?

        Ja.

        Müsste dann alles klappen?

        An sich: ja.

        Viele Grüße,
        Christian

        1. So! Jetzt klappt es bei mir. Ist auch schon online, wenn ihrs mal sehen wollt.
          Habe allerdings keine Möglicheit zu prüfen, obs bei den Problem-Browsern klappt...könnt ihr mal kurz draufschauen?

          Ist das eigentlich richtig, dass man jetzt den generierten Quelltext (also die Tabelle und so) nicht mehr mit "rechtsklick"->"Quelltext" ansehen kann?

          Naja, ist ja auch nicht so wichtig, hauptsache es klappt.

          Vielen Dank für eure Hilfe! Man lernt nie aus!

          Gruß

          Max

          1. So! Jetzt klappt es bei mir. Ist auch schon online, wenn ihrs mal sehen wollt.
            Habe allerdings keine Möglicheit zu prüfen, obs bei den Problem-Browsern klappt...könnt ihr mal kurz draufschauen?

            jo, so klappt's auch ich hab mich in meinem anderen Posting geirrt, das ist schon eine Variante die ok ist und auch ion alllen Browsern funktioniert.

            Struppi.

          2. Hallo Max,

            Habe allerdings keine Möglicheit zu prüfen, obs bei den Problem-Browsern klappt...

            Das solltest Du ändern. Mozilla gibt es unter http://www.mozilla.org/ kostenlos zum Download. (Lade Dir am besten die Version 1.3.1 runter)

            könnt ihr mal kurz draufschauen?

            Klappt soweit.

            Ist das eigentlich richtig, dass man jetzt den generierten Quelltext (also die Tabelle und so) nicht mehr mit "rechtsklick"->"Quelltext" ansehen kann?

            Ja, das ist richtig. Du kannst aber den Inhalt über

            javascript: document.write (document.body.innerHTML); document.close(); void(0);

            direkt ins Dokument schreiben und dann mit Ansicht->Quelltext anzeigen lassen. (es wird allerdings nur der Inhalt von <body> genommen)

            Viele Grüße,
            Christian

            1. Vielen Dank!
              Wegen einem Zweit-Browser habe ich mir schonmal Gedanken gemacht. Welcher Browser eignet sich dazu? Mozilla? Opera? Netscape? Welcher ist der Browser, der am ehesten einem "IE-Code" den Garaus macht?

              Btw.: Was ist InnerHTML?

              Gruß

              1. Hallo Max,

                Wegen einem Zweit-Browser habe ich mir schonmal Gedanken gemacht. Welcher Browser eignet sich dazu? Mozilla? Opera? Netscape?

                Zum Testen solltest Du Dir mindestens den IE, Mozilla (nachdem Netscape 7 auf Mozilla basiert, reicht Mozilla) und Opera ab 7 installiert haben, besser wären noch zusätzlich Netscape 4 und Opera 6, eventuell noch Konqueror.

                Zum Surfen solltest Du Dir den Browser aussuchen, der Dir am besten gefällt.

                Welcher ist der Browser, der am ehesten einem "IE-Code" den Garaus macht?

                Wie meinst Du das?

                Btw.: Was ist InnerHTML?

                InnerHTML gibt es nicht. innerHTML ist eine von Microsoft eingeführte, inzwischen von verschiedenen Browsern unterstützte, Eigenschaft, die den HTML-Inhalt eines "Knotens" in HTML enthält.

                Also wenn ich ein

                "<p>Hallo, wie geht es <em id="alpha"><strong>D</strong>ir</em>?</p>"

                habe, dann liefert

                alert (document.getElementById('alpha').innerHTML);

                folgendes:

                "<strong>D</strong>ir"

                Ich kann den Inhalt auch verändern:

                document.getElementById('alpha').innerHTML = 'Euch';

                Dann sieht der Besucher:

                "Hallo, wie geht es Euch?"

                innerHTML wird ab Mozilla 0.9.irgendwas (und damit jeden aktuellen Mozilla und Netscape 7), Internet Explorer ab 4 oder 5 (weiß nicht mehr genau), Konqueror (weiß die Version auch nicht auswendig) und Opera ab 7 unterstützt, wobei die Opera-Unterstützung leicht von den anderen abweicht. innerHTML ist jedoch nicht standardisiert.

                Viele Grüße,
                Christian

                1. Welcher ist der Browser, der am ehesten einem "IE-Code" den Garaus macht?

                  Ich meinte, welcher Browser ist am "wenigsten gleich" mit dem IE? Also, bei welchem Browser ist die Wahrscheinlichkeit am höchsten, dass ein Script, das im IE funktioniert, nicht funktioniert?
                  Besser? ;)

                  1. Hallo Max,

                    Ich meinte, welcher Browser ist am "wenigsten gleich" mit dem IE? Also, bei welchem Browser ist die Wahrscheinlichkeit am höchsten, dass ein Script, das im IE funktioniert, nicht funktioniert?

                    Eindeutig Netscape 4. :-) Der ist allerdings auf einem technologischen Stand von vor 5 Jahren.

                    Viele Grüße,
                    Christian

                    --
                    </faq/#Q-05a>, </faq/#Q-05c>
                    1. Ok, das hat sich dann erledigt.
                      Ich nehm irgendwann mal einen der anderen Browser...Mit Netscape 4 hatte ich früher schon ständig Stress. Wurde dann vom IE abgelöst.
                      Aber es wird offtopic. ;)

                      Vielen Dank nochmal für deine Hilfe! Ich schau mal, wie weit ich jetzt komme ;)

                      Gruß!

                      Max

  2. Hallo.
    Im Moment "muss" (ich machs freiwillig) ich für einen Lehrer von mir einen Kalender mit verschiedenen Pics-of-the-day basteln. Das Ding klappt auch bis jetzt ganz gut. Nur habe ich von ihm gehört, dass es unter Mozilla und Netscape nicht funktioniert. Genaue Browserversionen weiß ich momentan leider noch nicht.
    Jetzt hatte ich gestern ein anderes Problem mit dem Kalender angesprochen, und nebenbei den Tipp bekommen, dass die Fehlermeldung in Mozilla folgende ist:

    Error: AlleBilder is not defined
    Source File: http://www.mastershrimp.com/kalender/Kalender.js
    Line: 105

    "AlleBilder" ist ein Array, der eine globale Variable ist. Im IE klappt das auch problemlos...nur halt bei den anderen nicht.
    Könnte mir jemand, der Ahnung von den anderen Browsern hat, sagen, welche Elemente in meinem Code nicht browserunabhängig sind? Und am besten auch, wie man das Problem beseitigt.

    Dein Problem ist, dass du das Dokument komplett neu beschreibst. Was dann passiert läßt sich nicht vorhersagen. Das beste, weil auch für alte Browser tauglichste Mittel dagegen ist ein Frameset zu verwenden und dort das Dokument neu zu beschreiben.

    In etwa so:

    <script ...>
    </script>

    <frameset rows="100%" onload="KalenderGenerate();">
    <frame src="about:blank" name="inhalt">
    </frameset>

    und in KalenderGenerate musst beschreibst du dann self.inhalt neu. Das klappt sogar in 3'er Browsern ohne Probleme.

    Struppi.

    P.S. der switch/case Block ist immer noch überflüssig.

    1. P.S. der switch/case Block ist immer noch überflüssig.

      Das habe ich schon geändert und gerade hochgeladen. Danke!

      Was hältst du von der Lösung von Christian Seiler?

      1. Was hältst du von der Lösung von Christian Seiler?

        Meine ist besser ;-)

        nö, aber um nur den body Inhalt zu ändern musst du innerHTML benutzen, was aber bei alten Browswern und im Opera nicht funktioniert. von daher ist die meinige Variante flexibler.

        Struppi.

        1. Hallo Struppi,

          nö, aber um nur den body Inhalt zu ändern musst du innerHTML benutzen, was aber bei alten Browswern und im Opera nicht funktioniert.

          Muss er denn den Inhalt dynamisch ändern? Soweit ich sehen kann, nicht.

          Viele Grüße,
          Christian