Gina R.: window.setTimeout() in Verbindung mit window.open()

Hallo zusammen,

ich bin gerade ein bisschen am Verzweifeln! Ich habe vor, aus einer Folge von HTML Pages (picture_000.html, picture_001.html, picture_002.html ...) eine Diashow aufzubauen. Nach dem Durchackern der SELFHTML Dok habe ich gefunden, dass window.setTimeout("Script",Timeout) wohl das Richtige. Ich habe also versucht, den Wechsel der einzelnen Fotoseiten mit dem Aufruf

window.setTimeout("window.open(Newpage,3000)) im body(onload=...)nach also jeweils 3 Sekunden automatisch erfolgen zu lassen. Die ganzen Iterationen drumherum und die Abruchbedingungen kann ich hier weglassen. Das Ergebnis des obigen Funktionsaufrufes war jedenfalls, dass es nicht funktioniert hat.

Also habe ich zu Testzwecken als Argument für den setTimeout() die Funktion alert() hergenommen, so wie es in der Javascript Dok von SELFHTML verwendet wird. Das hat prächtig funktioniert; jedesmal wurde drei Sekunden nach dem Laden die alert Meldung ausgegeben, auch mit den richtigen Dokumentnamen.

Ersetze ich den alert-Aufruf nun wieder mit dem windows.open(), wird kein Timeout abgewartet, sondern das Ganze rast nur so durch mit allen Bildseiten.

Ist das ein normales Verhalten des setTimeout(), weil durch das Laden des neuen Dokuments irgend eine Eigenschaft im window-Objekt verlorengeht? Und wenn ja, warum passiert das nicht erst NACH dem Timeout?

Ich muss zugeben, dass ich das Verhalten nicht verstehe!

Ich arbeite hier übrigens auf einem Mac mit OSX 10.4 und Safari 4.0.3, eine Version, der ich seit einiger Zeit sowieso nicht mehr ganz vertraue. Mit dem Firefox bin ich ebenfalls nicht weitergekommen, der hat sofort wegen der PopUp-Windows gemeckert.

Hoffe, ich habe das Problem einigermassen verständlich geschildert und irgendjemand hier im Forum kann mir helfen.

Danke und Gruss
Gina

  1. Hi,

    window.setTimeout("window.open(Newpage,3000)) im body(onload=...)nach also jeweils 3 Sekunden automatisch erfolgen zu lassen.

    Warum übergibst du window.open als zweiten Parameter den Zahlwert 3000, wieso folgt danach eine an dieser Stelle nicht erlaubte schliessende runde Klammer - und wo beendest du das hinter der ersten öffnenden Klammer begonnene Textliteral eigentlich wieder?

    Also habe ich zu Testzwecken als Argument für den setTimeout() die Funktion alert() hergenommen, so wie es in der Javascript Dok von SELFHTML verwendet wird. Das hat prächtig funktioniert; jedesmal wurde drei Sekunden nach dem Laden die alert Meldung ausgegeben, auch mit den richtigen Dokumentnamen.

    Dann hast du dich dabei wohl an die Syntaxregeln für JavaScript gehalten; was man von oben gezeigtem ganz und gar nicht behaupten kann.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hi,

      window.setTimeout("window.open(Newpage,3000)) im body(onload=...)nach also jeweils 3 Sekunden automatisch erfolgen zu lassen.

      Warum übergibst du window.open als zweiten Parameter den Zahlwert 3000, wieso folgt danach eine an dieser Stelle nicht erlaubte schliessende runde Klammer - und wo beendest du das hinter der ersten öffnenden Klammer begonnene Textliteral eigentlich wieder?

      Hallo Chris,

      da habe ih mich vertippt, nicht im eigentlichen Code, aber hier. natürlich hatte ich den Aufruf im Dokument so formuliert:

      window.setTimeout("window.open(Newpage)",3000)

      Ich hab mir - genau wegen irgendwelcher Parsingprobleme - folgende beiden Hilfsfunktionen geschrieben:

      function loadPic(PageName) {
      var myPageName=PageName;
      window.open(myPageName,"_top");
      }

      function NextPicTest(PageName) {
      var myPageName=PageName;
      comment="Nächstes: " + myPageName;
      window.setTimeout("alert(comment)",3000);
      loadPic(myPageName);
      }

      das Beispiel kannst Du selbst ausprobieren unter der Webadresse:

      http://www.ginar.ch/gallery/2009/Morcote - April 2009/

      Klick da mal auf das erste Foto!

      Gruss
      Gina]

      1. In NextPicTest lädtst du die nächste Seite aber doch sofort?
        Mit timeOut rufst du doch nur den alert auf!

        1. In NextPicTest lädtst du die nächste Seite aber doch sofort?
          Mit timeOut rufst du doch nur den alert auf!

          Hast Recht! Das muss bei der Testerei und dem Spielen mit alert und nicht alert und window.open() und nicht rausgekommen sein. Sorry.

          Ich habs jetzt schnell geändert (ist auch fürs Testbeispiel auf meiner Homepage gültig):

          function loadPic(PageName) {
          var myPageName=PageName;
          window.open(myPageName,"_top");
          }

          function NextPicTest(PageName) {
          var myPageName=PageName;
          comment="Nächstes: " + myPageName;
          window.setTimeout("loadPic(myPageName)",3000);
          }

          Ergebnis: nach dem Laden von picture000.html passiert jetzt gar nichts mehr. Dabei sollte eigentlich picture_001.html nachgeschoben werden.

          picture_000:

          <body onload="NextPicTest('picture_001.html')">

          picture_001:

          <body onload="NextPicTest('picture_002.html')">

          usw.

          1. Ich muss das Ganze nochmal überschlafen. Vielleicht versuche ich morgen einen anderen Ansatz: ein "Rahmendokument" und dann einfach die Images darin austauschen, mit setInterval().

            Danke Euch, Gute Nacht allerseits
            Gina

            PS: da ich die Site noch selbst hoste, ist sie vermutlich bis heute mittag nicht mehr erreichbar, ich schick meinen Mac jetzt bald schlafen

          2. Hi,

            Ergebnis: nach dem Laden von picture000.html passiert jetzt gar nichts mehr.

            Eine Fehlermeldung in der Konsole ist nicht "gar nichts".

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          3. function NextPicTest(PageName) {
            var myPageName=PageName;
            comment="Nächstes: " + myPageName;
            window.setTimeout("loadPic(myPageName)",3000);
            }

            myPageName ist keine globale Variable. Deshalb kannst du diese auch nicht verwenden, da setTimeout deine funktion loadPic im globalen Scope ausführt. Sinnvoller wäre hier eine Closure.

            function NextPicTest(PageName) {  
              var myPageName=PageName;  
              comment="Nächstes: " + myPageName;  
              window.setTimeout(function () { loadPic(myPageName); },3000);  
            }
            
  2. Hallo zusammen,

    ich bin gerade ein bisschen am Verzweifeln! Ich habe vor, aus einer Folge von HTML Pages (picture_000.html, picture_001.html, picture_002.html ...) eine Diashow aufzubauen. Nach dem Durchackern der SELFHTML Dok habe ich gefunden, dass window.setTimeout("Script",Timeout) wohl das Richtige. Ich habe also versucht, den Wechsel der einzelnen Fotoseiten mit dem Aufruf

    window.setTimeout("window.open(Newpage,3000)) im body(onload=...)nach also jeweils 3 Sekunden automatisch erfolgen zu lassen. Die ganzen Iterationen drumherum und die Abruchbedingungen kann ich hier weglassen. Das Ergebnis des obigen Funktionsaufrufes war jedenfalls, dass es nicht funktioniert hat.

    Also habe ich zu Testzwecken als Argument für den setTimeout() die Funktion alert() hergenommen, so wie es in der Javascript Dok von SELFHTML verwendet wird. Das hat prächtig funktioniert; jedesmal wurde drei Sekunden nach dem Laden die alert Meldung ausgegeben, auch mit den richtigen Dokumentnamen.

    Ersetze ich den alert-Aufruf nun wieder mit dem windows.open(), wird kein Timeout abgewartet, sondern das Ganze rast nur so durch mit allen Bildseiten.

    Ist das ein normales Verhalten des setTimeout(), weil durch das Laden des neuen Dokuments irgend eine Eigenschaft im window-Objekt verlorengeht? Und wenn ja, warum passiert das nicht erst NACH dem Timeout?

    Ich muss zugeben, dass ich das Verhalten nicht verstehe!

    Ich arbeite hier übrigens auf einem Mac mit OSX 10.4 und Safari 4.0.3, eine Version, der ich seit einiger Zeit sowieso nicht mehr ganz vertraue. Mit dem Firefox bin ich ebenfalls nicht weitergekommen, der hat sofort wegen der PopUp-Windows gemeckert.

    SOLVED: Ich bin mittlerweile dahintergekommen, dass der setTimeout assynchron läuft, d.h. er wartet wirklich nicht. Genau das war mein Gedankenfehler, ich hab ihn verstanden, wie einen wait() in anderen Programmiersprachen. Möglicherweise ist das auch das Problem in einem anderen Thread https://forum.selfhtml.org/?t=192342&m=1283471