marc beekhuis: alle child-pop-ups schliessen

function windowClose()
{
if (soundOpen && !soundOpen.closed) soundOpen.close();
if (textOpen && !textOpen.closed) textOpen.close();
if (picturesOpen && !picturesOpen.closed) picturesOpen.close();
...
}

mit dieser funktion möchte ich alle offenen child-pop-ups schliessen. das problem: es berücksichtigt nur geöffnete oder wieder geschlossene fenster. wurde das fenster "sound" zum beispiel gar nicht erst geöffnet, bricht das javascript ab und die restlichen fenster bleiben offen. müsste ich da was mit "else" definieren?

any ideas are welcome
gruss
marc

  1. hi

    mit dieser funktion möchte ich alle offenen child-pop-ups schliessen. das problem: es berücksichtigt nur geöffnete oder wieder geschlossene fenster. wurde das fenster "sound" zum beispiel gar nicht erst geöffnet, bricht das javascript ab und die restlichen fenster bleiben offen. müsste ich da was mit "else" definieren?

    du solltest die fenster die du schliessen möchtest vorher auf existenz überprüfen.

    so long
    ole
    (8-)>

    1. du solltest die fenster die du schliessen möchtest vorher auf existenz überprüfen.

      und wie müsste ich das anstellen? beispiel?
      besten dank
      marc

  2. function windowClose()
    {
    if (soundOpen && !soundOpen.closed) soundOpen.close();
    if (textOpen && !textOpen.closed) textOpen.close();
    if (picturesOpen && !picturesOpen.closed) picturesOpen.close();
    ...
    }

    mit dieser funktion möchte ich alle offenen child-pop-ups schliessen. das problem: es berücksichtigt nur geöffnete oder wieder geschlossene fenster. wurde das fenster "sound" zum beispiel gar nicht erst geöffnet, bricht das javascript ab und die restlichen fenster bleiben offen. müsste ich da was mit "else" definieren?

    Du kannst es dir einfacher machen:

    top.POP_UP = new Array();
    window.onunload = close_all;

    function popup(url, name, param)
    {
         if(!param) param = "";
         if(!name) name = 'X' + Math.random();

    var win = window.open(url, name, param);
         top.POP_UP[win.name] = win;
         return top.POP_UP[win.name];
    }

    function close_all()
    {
        // Alle popups schliessen
        for(var win in top.POP_UP) if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();
    }

    popup('about:blank', 'F1');
    popup('about:blank', 'F2');

    Struppi.

  3. top.POP_UP = new Array();
    window.onunload = close_all;
    function popup(url, name, param)
    {
         if(!param) param = "";
         if(!name) name = 'X' + Math.random();
         var win = window.open(url, name, param);
         top.POP_UP[win.name] = win;
         return top.POP_UP[win.name];
    }
    function close_all()
    {
        // Alle popups schliessen
        for(var win in top.POP_UP) if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();
    }
    popup('about:blank', 'F1');
    popup('about:blank', 'F2');
    als javascript-novize bin ich wohl doch etwas überfordert mit dem teil.
    -kann ich das skript so einbauen wie oben ?
    (wohin muss "top.POP_UP = new Array();
    window.onunload = close_all;"?)
    "popup('about:blank', 'F1');
    popup('about:blank', 'F2');"
    wie kann ich die beiden pop-ups aufrufen (name?)
    mit bestem dank für hilfe
    gruss marc beekhuis

    1. eigentlich is es ganz einfach:

      top.POP_UP = new Array();

      ein globales Array, du kannst es auch window.POP_UP nennen, das alle Fenstereferenzen sammelt.

      window.onunload = close_all;

      der onunload event (kann man auch so schreiben <body onunload="close_All();">)
      wird mit der Funktion close_all aufgerufen (ohne Klammern, ist es eine Referenz auf die Funktion: alert(typeof close_all);)

      function popup(url, name, param)

      Diese Funktion öffnet dein popUP es hat die gleichen Parameter, wie window.open()

      {
           if(!param) param = "";

      Zur Sicherheit, damit param nicht undefiniert ist, kan aber wahrschienlich weggelassen werden.

      if(!name) name = 'X' + Math.random();

      Das Fenster braucht einen Namen .

      var win = window.open(url, name, param);

      hier wird dann das Fenster geöffnet.

      top.POP_UP[win.name] = win;

      und in das Array gesteckt.

      return top.POP_UP[win.name];

      Die funktion gibt, wioe window.open eine Referenz auf das Fenster zurück.

      }
      function close_all()

      Duie funktion die beim onunload aufgerufen wird.

      {
          // Alle popups schliessen
          for(var win in top.POP_UP) if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();

      gehe durch alle Elemente des Arrays POP_UP (sind Fensterreferenzen) und wenn diese nicht geschlossen wurde, Fenster schliessen.

      }

      popup('about:blank', 'F1');
      popup('about:blank', 'F2');

      Hier werden Testhalber 2 Fenster geöffnet, die beim verlassen der Seite wieder geschlossen werden.

      wie kann ich die beiden pop-ups aufrufen (name?)

      so wie du vorher window.open verwendet hast.

      Struppi.

      1. tausenddank. werde mich mal an die arbeit machen...
        gruss marc

        1. <script language="JavaScript" type="text/javascript">
                <!--
               top.POP_UP = new Array();
               window.onunload = close_all;
               function popup(url, name, param)
               {
               if(!param) param = "";
               if(!name) name = 'X' + Math.random();
               var win = window.open(url, name, param);
               top.POP_UP[win.name] = win;
               return top.POP_UP[win.name];
               }
               function close_all()
               {
             for(var win in top.POP_UP) if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();
               }
           //-->
              </script>

          so habe ich das skript nun eingebaut. der funktions-aufruf sieht so aus:

          "javascript:popup('pictures.html','folder','width=150,height=150,scrollbars=yes,left=0,top=260,screenX=0,screenY=260')"

          da muss wohl irgendein anfängerfehler drin sein... es tut sich kein fensterchen auf...

          greetings marc

          1. so habe ich das skript nun eingebaut. der funktions-aufruf sieht so aus:

            "javascript:popup('pictures.html','folder','width=150,height=150,scrollbars=yes,left=0,top=260,screenX=0,screenY=260')"

            da muss wohl irgendein anfängerfehler drin sein... es tut sich kein fensterchen auf...

            Was für eine Fehlermeldung erhälst du?
            Bei mir läuft's einwandfrei.

            <script>
            popup('pictures.html','folder','width=150,height=150,scrollbars=yes,left=0,top=260,screenX=0,screenY=260')"
            </script>

            struppi.

            1. hallo struppi
              gar keine fehlermeldung. es öffnet sich kein fenster... die funktion popup rufe ich von einem shockwave-film aus, aber dies ist ja eigentlich egal. es tut sich auch nichts wenn ich die fenster auf "onload" aufrufe.
              ich arbeite auf mac mit IE5.
              ich habe das skript genauso in der seite stehen wie ich es geschickt habe. habe ich da irgendwo ein fehler "reingeschrieben" oder was vergessen?
              gruss marc

              1. hallo struppi
                gar keine fehlermeldung. es öffnet sich kein fenster... die funktion popup rufe ich von einem shockwave-film aus, aber dies ist ja eigentlich egal. es tut sich auch nichts wenn ich die fenster auf "onload" aufrufe.

                Du brauchst es nicht onload aufzurufen einfach so wie is es schrieb in einem Skriptblock.

                wie du die Fehlermldung im IE kriegst weißt du?

                Struppi.

                1. wie du die Fehlermldung im IE kriegst weißt du?

                  no. i don't.

                  auch die tests auf netcape communicator 4.5/mac schlugen fehl. teste jetzt mal auf dem pc. ich habe den verdacht das ich irgendwas grundsätzlich falsch gemacht habe. das aufrufen der pop-ups erfolgt wie schon erwähnt, aus einem integrierten shockwave-film. doch da kann doch kaum was schief gehen...
                  falls du shockwave installiert hast, schau dir doch mal meine page an. ganz am anfang öffnet sich das index-popup automatisch. es ist das parent fenster für die besagten kinder die einfach nicht kommen wollen.
                  by the way: tausenddank für die kompetente hilfe!
                  gruss marc

                  1. wie du die Fehlermldung im IE kriegst weißt du?
                    no. i don't.

                    Im IE: Ausrufezeichen in der Statuszeile anklicken (so denn eins da ist)
                    NC: 'javascript:' in die URL Zeile eintippen.

                    Ich hoffe mal auf'm Mac ist das gleich.

                    auch die tests auf netcape communicator 4.5/mac schlugen fehl. teste jetzt mal auf dem pc. ich habe den verdacht das ich irgendwas grundsätzlich falsch gemacht habe. das aufrufen der pop-ups erfolgt wie schon erwähnt, aus einem integrierten shockwave-film. doch da kann doch kaum was schief gehen...

                    keine Ahnung, kenn ich mich null aus, wie das mit JS aus Plugins ist. evtl. muss du dort das Fenster anders referenzieren, keine Ahnung.

                    falls du shockwave installiert hast, schau dir doch mal meine page an. ganz am anfang öffnet sich das index-popup automatisch. es ist das parent fenster für die besagten kinder die einfach nicht kommen wollen.

                    nö kein Shockwave. Ich unterzieh hier den Rechner zwar einem Streßtest (fleißiges Installieren von allem Möglichen ohne Rücksicht - damit ich irgendwann mal neu Installieren muss und dann nehm ich mir die Muse Linux drauf zu machen ;-) )
                    aber dazu hab ich jetzt keine Lust.

                    Sttruppi

                    1. folgender fehler taucht auf: "javascript-kompilierungsfehler, ungültiges zeichen"
                      nochmals der code

                      <script language="JavaScript" type="text/javascript">
                            <!--
                           top.POP_UP = new Array();
                           window.onunload = close_all;
                           function popup(url, name, param)
                           {
                         if(!param) param = "";
                         if(!name) name = 'X' + Math.random();
                         var win = window.open(url, name, param);
                         top.POP_UP[win.name] = win;
                         return top.POP_UP[win.name];
                           }
                           function close_all()
                           {
                         for(var win in top.POP_UP) if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();
                           }
                       //-->
                          </script>

                      kann es sein, dass es verschiedene möglichkeiten für die "param" eingabe gibt?

                      greez marc

                      1. folgender fehler taucht auf: "javascript-kompilierungsfehler, ungültiges zeichen"

                        Kann es sein, dass du den Code aus dem Forum kopiert hast?

                        Du musst evtl. alle Leerzeichen entfernen:

                        <script type="text/javascript"><!--
                        top.POP_UP = new Array();
                        window.onunload = close_all;
                        function popup(url, name, param)
                        {
                        if(!param) param = "";
                        if(!name) name = 'X' + Math.random();
                        var win = window.open(url, name, param);
                        top.POP_UP[win.name] = win;
                        return top.POP_UP[win.name];
                        }
                        function close_all()
                        {
                        for(var win in top.POP_UP) if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();
                        }
                        //-->
                        </script>

                        Struppi

                        1. yes! das wars. natürlich, da waren viel zu viele leerzeichen drin.
                          besten dank!
                          (ich spendiere ein digitales bier...)
                          gruss marc

                          1. (ich spendiere ein digitales bier...)

                            Momentan bin ich trocken (Erkältung), aber am wochenende dann ;-)

                            1. hoppla doch noch fehler...
                              wenn eines der "kinder" durch den benutzer geschlossen wird, erscheint beim schliessen des parent folgende fehlermeldung:

                              "objekt unterstützt diese eigenschaft oder methode nicht" gemeint ist damit offenbar folgende zeile:

                              if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();

                              tja...
                              gruz marc

                              1. "objekt unterstützt diese eigenschaft oder methode nicht" gemeint ist damit offenbar folgende zeile:

                                Eigentlich seltsam, aber ....

                                if(top.POP_UP[win].close && !top.POP_UP[win].closed) top.POP_UP[win].close();

                                .... versuch's mal so
                                if(typeof top.POP_UP[win].close != 'undefined' && !top.POP_UP[win].closed) top.POP_UP[win].close();

                                So, jetzt is aber Schluß für heute.

                                Struppi.

                                1. hallo struppi
                                  mit erkältung sollte man früh ins bett... anyway, danke für die späte antwort. aber der thread will nicht enden.

                                  die zeile

                                  if(typeof top.POP_UP[win].close != 'undefined' && !top.POP_UP[win].closed) top.POP_UP[win].close();

                                  gibt bei mir nach manuellem schliessen eines popups und beim schliessen des parent einen javascript-laufzeit-fehler aus. "win" sei nicht definiert....(?)

                                  gruss marc

                                  1. hallo struppi
                                    mit erkältung sollte man früh ins bett... anyway, danke für die späte antwort. aber der thread will nicht enden.

                                    die zeile

                                    if(typeof top.POP_UP[win].close != 'undefined' && !top.POP_UP[win].closed) top.POP_UP[win].close();

                                    gibt bei mir nach manuellem schliessen eines popups und beim schliessen des parent einen javascript-laufzeit-fehler aus. "win" sei nicht definiert....(?)

                                    Das war nur ein Schnipsel, die ganze Zeile lautet natürlich:

                                    for(var win in top.POP_UP) if(typeof top.POP_UP[win].close != 'undefined' && !top.POP_UP[win].closed) top.POP_UP[win].close();

                                    Diese Überprüfung ist aber für den IE 4 gedacht, der wenn man das popup schließt anfängt zu murren, da der aber so selten ist, reicht auch:

                                    for(var win in top.POP_UP) if(top.POP_UP[win] && !top.POP_UP[win].closed) top.POP_UP[win].close();

                                    Struppi.

                                    1. jetzt funzts... tausenddank und gute besserung!
                                      gruss marc

                                      1. hey struppi
                                        eben wollte ich noch routinemässig das ganze auf netscape und auf dem pc testen und... fehler:
                                        die popups gehen zwar kurz auf, aber dann verschwindet der inhalt der parentseite, das pop-up schliesst sich und im parent erscheint: [object]
                                        und in der titelleiste des parentfensters erscheint die funktion:
                                        javascript:popup(....)
                                        vielleicht ist ie5 auf mac hier wieder mal ein sonderfall, dann müsste ich wohl eine browserweiche einrichten. doch eine lösung für alle müsste es doch geben!
                                        greetings und danke für die geduld
                                        gruss marc

                                        1. hey struppi
                                          eben wollte ich noch routinemässig das ganze auf netscape und auf dem pc testen und... fehler:
                                          die popups gehen zwar kurz auf, aber dann verschwindet der inhalt der parentseite, das pop-up schliesst sich und im parent erscheint: [object]
                                          und in der titelleiste des parentfensters erscheint die funktion:
                                          javascript:popup(....)

                                          du benutzt einen Link?

                                          Dann hast du return false vergessen:

                                          <a href="url.html" onclick ="popup(...);return false;">

                                          Struppi.

                                          1. <a href="url.html" onclick ="popup(...);return false;">

                                            hallo struppi
                                            tut so nicht. leider. ich habe keinen link in html definiert, sondern über einen shockwave-film (lingo). der aufruf an javascript lautet

                                            "javascript:popup('sound.html','sound','width=250,height=100,scrollbars=no,left=0,top=0,screenX=0,screenY=0')"

                                            fehlt da was im javascript als definition? muss fast. denn die pop-ups aus lingo habe ich auch schon gebraucht, und die funktionierten bisher auf allen getesteten browsern.

                                            greetings marc

  4. lass uns mal nicht so weit weg driften ;-)

    also, versteh ich das richtig, du rufst aus dem Shockwave ein javascript: popup auf und dann siehst du im Browser HAuptfenster: [Object]?

    Das liegt dann wohl am Shockwave aufruf, damit kenn ich mich gar nicht aus, aber offensichtlich soll der das Fenster ändern.

    Struppi.