Stefan Richter: Hilfe: window.onload Problem im Firefox!!

Hallo Leute,

habe da mal ein eigenartiges Problem mit der window.onload Funktion im Firefox...

Ich habe folgende zwei Dateien:

test1.htm

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>

<HTML>

<HEAD>

<TITLE></TITLE>

</HEAD>

<BODY>

<IFRAME src="test2.htm"></IFRAME>

</BODY>

</HTML>

test2.htm

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>

<HTML>

<HEAD>

<TITLE></TITLE>

<SCRIPT type="text/javascript">

window.onload = function () { test.location.href = "http://www.google.de/" }

</SCRIPT>

</HEAD>

<BODY>

<IFRAME src="" name="test"></IFRAME>

</BODY>

</HTML>

Die test1.htm ist eine ganz einfache HTML Datei, wo lediglich nur ein IFrame enthalten ist, dieser verweist auf die test2.htm.
In der test2.htm wird über das Ereignis "window.onload", wenn die Seite geladen wurde, eine andere Seite (bspw. www.google.de) aufgerufen.

Bewegt man nun den Mauszeiger außerhalb des IFrame's aus der test1.htm (name="test"), so wird der Mauszeiger als Sanduhr dargestellt und bei größeren Inhalten steht unten in der Statusleiste "Übertrage Daten von ...".

Weiß jemand zufällig warum das so ist, warum der Firefox im Hintergrund weiterhin versucht Daten herunterzuladen?

  1. habe da mal ein eigenartiges Problem mit der window.onload Funktion im Firefox...

    Die Fehlerkonsole ist leer?

    window.onload = function () { test.location.href = "http://www.google.de/"

    Was ist test?

    Weiß jemand zufällig warum das so ist, warum der Firefox im Hintergrund weiterhin versucht Daten herunterzuladen?

    Versucht er mit Sicherheit nicht, sowas ist i.d.R. ein Zeichen eines fehlerhaften Skripts.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. habe da mal ein eigenartiges Problem mit der window.onload Funktion im Firefox...

      Die Fehlerkonsole ist leer?

      Ja klar in der Fehlerkonsole wird nix angezeigt, die Scriptzeile ist ja auch soweit in Ordnung.

      »»

      window.onload = function () { test.location.href = "http://www.google.de/"

      Was ist test?

      test ist der IFrame Name, in dem die Seite www.google.de geladen wird.

      »»

      Weiß jemand zufällig warum das so ist, warum der Firefox im Hintergrund weiterhin versucht Daten herunterzuladen?

      Versucht er mit Sicherheit nicht, sowas ist i.d.R. ein Zeichen eines fehlerhaften Skripts.

      Naja ich habe halt das Problem auf einer Seite, dass der Firefox versucht Daten herunterzuladen, bzw. auf Daten wartet (ersichtlich an der Statuszeile: Übertragen Daten von ...) und dadurch hängt sich der Firefox nach einer gewissen Zeit von alleine auf, oder es kommt die Meldung Skript stoopen oder fortsetzen.

      1. Die Fehlerkonsole ist leer?

        Das wundert mich.

        Ja klar in der Fehlerkonsole wird nix angezeigt, die Scriptzeile ist ja auch soweit in Ordnung.

        ist sie eigentlich nicht.

        »»

        window.onload = function () { test.location.href = "http://www.google.de/"

        Was ist test?

        test ist der IFrame Name, in dem die Seite www.google.de geladen wird.

        und was ergibt alert(test);?

        Naja ich habe halt das Problem auf einer Seite, dass der Firefox versucht Daten herunterzuladen, bzw. auf Daten wartet (ersichtlich an der Statuszeile: Übertragen Daten von ...) und dadurch hängt sich der Firefox nach einer gewissen Zeit von alleine auf, oder es kommt die Meldung Skript stoopen oder fortsetzen.

        Das ist etwas ganz anderes, du hast hier offensichtlich eine endlosschleife.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Die Fehlerkonsole ist leer?

          Das wundert mich.

          Ja klar in der Fehlerkonsole wird nix angezeigt, die Scriptzeile ist ja auch soweit in Ordnung.

          ist sie eigentlich nicht.

          Warum soll die Scriptzeile nicht in Ordnung sein, es wird in keinem Browser ein Fehler angezeigt, lediglich der Firefox macht eine Ausnahme dabei?

          und was ergibt alert(test);?

          Es kommt eine Meldung Test, wenn man diese wegklickt, bleibt zwar der Frame leer, aber der Firefox lädt nicht weiter oder versucht es zumindest.

          Das ist etwas ganz anderes, du hast hier offensichtlich eine endlosschleife.

          Nein, eine Endlosschleife ist nicht eingebaut, habe ich bereits geprüft... es muss an diesem window.onload liegen.

          Aber hast du es mal bei dir getestet.. habe es im FF1.5 und im FF2.0 probiert, beides mal der gleiche Effekt.

          1. Ja klar in der Fehlerkonsole wird nix angezeigt, die Scriptzeile ist ja auch soweit in Ordnung.

            ist sie eigentlich nicht.

            Warum soll die Scriptzeile nicht in Ordnung sein, es wird in keinem Browser ein Fehler angezeigt, lediglich der Firefox macht eine Ausnahme dabei?

            Weil test nicht definiert ist. Zumindest nicht in dem Code den du uns gezeigt hast. Auch wenn ein x-beliebiges Element so heißt, macht kein vernüftiger Browser ein window Objekt daraus. (höchstens der IE)

            und was ergibt alert(test);?

            Es kommt eine Meldung Test, wenn man diese wegklickt, bleibt zwar der Frame leer, aber der Firefox lädt nicht weiter oder versucht es zumindest.

            Wenn wirklich die Meldung 'Test' komm, dann ist test ein String und hat kein location Objekt und dieser Fehler sollte auch in deinem Browser erscheinen.

            Das ist etwas ganz anderes, du hast hier offensichtlich eine endlosschleife.

            Nein, eine Endlosschleife ist nicht eingebaut, habe ich bereits geprüft... es muss an diesem window.onload liegen.

            Wenn du die Meldung bekommst das Skript läuft zu lange ist es mit grosser Wahrscheinlichkeit eine Endlosschleife.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Weil test nicht definiert ist. Zumindest nicht in dem Code den du uns gezeigt hast. Auch wenn ein x-beliebiges Element so heißt, macht kein vernüftiger Browser ein window Objekt daraus. (höchstens der IE)

              ich muss mich korrigieren, es scheint so zu sein, als ob sie es FF 2 doch macht.

              Aber bei mir läuft dein Code ohne Probleme

              Struppi.

              --
              Javascript ist toll (Perl auch!)``
              1. Nein, also das mit dem alert("test") da wird doch eine Meldung "Test" ausgegeben! Zum Testen ob der Firefox nach Ausgabe der Meldung auch noch was versucht zu laden, was ja nicht der Fall ist... wenn man den Link des Frames ändert schon.

                Um Frames anzusprechen genügt es einfach den Namen des Frames anzusprechen, danach kann man auf dessen Objekte, also bspw. location, zugreifen...

                test.location.href = "www.google.de"

                Das funktioniert in jedem Browser... man könnte natürlich dem IFrame noch eine ID mitgeben und sagen:

                document.getElementById("test").location.href.

                Das tut aber in dem Falle nichts zur Sache, da beides den gleichen Effekt bringt, nämlich das außerhalb des Frames die Sanduhr angezeigt wird, bzw. bei größeren Dateiinhalten sogar die Meldung erscheint, dass Daten übertragen werden!

                Nehme mal die beiden Dateien die ich hier gepostet habe und teste das mal im Firefox... sobald man mit dem Mauszeiger außerhalb des Frames "Test" kommt, wird die Sanduhr angezeigt... habe das bereits an mehreren Rechnern (Windows) getestet und bei jedem der gleiche Effekt!

                1. Nein, also das mit dem alert("test") da wird doch eine Meldung "Test" ausgegeben! Zum Testen ob der Firefox nach Ausgabe der Meldung auch noch was versucht zu laden, was ja nicht der Fall ist... wenn man den Link des Frames ändert schon.

                  Ich hab nirgends geschrieben, das du alert('test'); ausgeben lassen sollst. Sondern alert(test);

                  Um Frames anzusprechen genügt es einfach den Namen des Frames anzusprechen, danach kann man auf dessen Objekte, also bspw. location, zugreifen...

                  i.d.R. ist das nicht so, scheint aber iframe zu stimmen.

                  Das tut aber in dem Falle nichts zur Sache, da beides den gleichen Effekt bringt, nämlich das außerhalb des Frames die Sanduhr angezeigt wird, bzw. bei größeren Dateiinhalten sogar die Meldung erscheint, dass Daten übertragen werden!

                  Bei mir nicht.

                  Nehme mal die beiden Dateien die ich hier gepostet habe und teste das mal im Firefox... sobald man mit dem Mauszeiger außerhalb des Frames "Test" kommt, wird die Sanduhr angezeigt... habe das bereits an mehreren Rechnern (Windows) getestet und bei jedem der gleiche Effekt!

                  Bei mir nicht.

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Ich hab nirgends geschrieben, das du alert('test'); ausgeben lassen sollst. Sondern alert(test);

                    Ja, sorry hab das dann falsch verstanden.. bei alert(test) bringt er nur den Verweis des Objektes als Meldung.

                    i.d.R. ist das nicht so, scheint aber iframe zu stimmen.

                    Nein, ist auch nur bei IFrames der Fall, um nicht ständig umständlichen Code schreiben zu müssen.

                    Bei mir nicht.

                    Ja gute Frage, warum das da bei dir nicht der Fall ist.. wie gesagt das Problem tritt bei FF1.5, FF2.0 unter Windows auf.
                    Kann das vielleicht noch jemand andres mal mit testen, wäre extrem nett!

                    Ich entwickle schon seit längerer Zeit ein Browsergame http://www.evolution-wars.de wo ich InGame das gleiche Konstrukt, wie ich oben geschrieben habe, verwende und da der Fehler bei allen Spielern auftritt, die den FF verwenden!

                    1. Ja, sorry hab das dann falsch verstanden.. bei alert(test) bringt er nur den Verweis des Objektes als Meldung.

                      Was mich erstaunt hat.

                      Ja gute Frage, warum das da bei dir nicht der Fall ist.. wie gesagt das Problem tritt bei FF1.5, FF2.0 unter Windows auf.
                      Kann das vielleicht noch jemand andres mal mit testen, wäre extrem nett!

                      FF 2/winXP mit dem Beispiel code den du hier gezeigt hast.

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. Sehr eigenartig... aber es haben halt bei diesem Konstrukt sehr viele (oder besser gesagt alle) das Problem.

                        Und du hast auch die Test1.htm geöffnet?

                        Wenn ich nur die Test2.htm öffne dann klappt das auch wunderbar...

                        1. Und du hast auch die Test1.htm geöffnet?

                          Wenn ich nur die Test2.htm öffne dann klappt das auch wunderbar...

                          Das hatte ich übersehen, offensichtlich reicht onload nicht, du musst da noch einen kleinen Timeout setzen bis du den Frame neu lädst.

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)
                          1. Das hatte ich übersehen, offensichtlich reicht onload nicht, du musst da noch einen kleinen Timeout setzen bis du den Frame neu lädst.

                            Hehe das funktioniert wunderbar mit dem Timeout, das Problem ist gelöst:

                            window.onload = function () { setTimeout("test.location.href="http://www.google.de/"", 500) }

                            Mal schauen ob sich das jetzt mit dem Aufhängen des FF auch gelöst hat...

                            Vielen Dank für die nette und schnelle Hilfe!! :-)

                            Aber warum ist das eigentlich so, finde ich etwas unlogisch?

                            Beste Grüße

                            1. Mal schauen ob sich das jetzt mit dem Aufhängen des FF auch gelöst hat...

                              Vielen Dank für die nette und schnelle Hilfe!! :-)

                              naja, schnell ... aber nett stimmt ;-)

                              Aber warum ist das eigentlich so, finde ich etwas unlogisch?

                              Der window.onload tritt auf wenn das Fenster geladen ist, dann ist aber das iframe noch nicht unbedingt fertig, d.h. im Prinzip könntest du auch den onload Event des iframes verwenden, dann müßtest du aber den wiederholten auzfruf verhindern.

                              Struppi.

                              --
                              Javascript ist toll (Perl auch!)
                              1. naja, schnell ... aber nett stimmt ;-)

                                Doch doch war schon schnell, mussten nur halt erstmal auf nen gemeinsamen Nenner kommen, also das du auch weist was ich meine ;-)

                                Der window.onload tritt auf wenn das Fenster geladen ist, dann ist aber das iframe noch nicht unbedingt fertig, d.h. im Prinzip könntest du auch den onload Event des iframes verwenden, dann müßtest du aber den wiederholten auzfruf verhindern.

                                Gut zu wissen, nochmals vielen Dank!

  2. Hello out there!

    <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>

    BTW, die http://de.selfhtml.org/html/allgemein/grundgeruest.htm#dokumenttyp@title=DOCTYPE-Angaben sind falsch.

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hello out there!

      Grmpf; ich sollte nicht so früh am Morgen vorm Wachwerden posten.

      <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>

      BTW, die http://de.selfhtml.org/html/allgemein/grundgeruest.htm#dokumenttyp@title=DOCTYPE-Angaben sind falsch.

      Nö, sind sie nicht. Sie könnten mit dem system identifier (URI) engänzt werden.

      See ya up the road,
      Gunnar

      --
      „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
      1. Ja okay, aber die DOC-Type Angaben haben ja auch nichts mit dem geschilderten Problem zu tun.

  3. Das gleiche Problem tritt übrigens auch auf, wenn man das onload event direkt in den Body-Tag reinsetzt:

    test2.htm

    <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'>

    <HTML>

    <HEAD>

    <TITLE></TITLE>

    </HEAD>

    <BODY onload="test.location.href = 'http://www.google.de/'">

    <IFRAME src="" name="test"></IFRAME>

    </BODY>

    </HTML>