André Laugks: Existens eines Fensters prüfen

Hallo!

Ich möchte prüfen, ob ein neu geöffnetes Fenster existiert. Ich habe keine Probleme, wenn man das Fenster automatisch öffnet, siehe auch http://www.teamone.de/selfhtml/tecb.htm#a2. Nur öffnet man das neue Fenster über einen Link. In diesem Fenster kann man sich durch Seiten klicken. Wenn nun das Mutterframe im Vordergrund ist und man auf den Link fürs neue Fenster klickt, soll das neue Fenster nur wieder in den Vordergrund geholt werden. Lasse ich es nochmal über fenster = open(...) laufen, wird seite1.html geladen.

Ich führe mal zwei Beispiele auf. Das alert ist nur zu Testzwecken da!

Die erste Möglichkeit funktioniert prächtig, solange man nicht das neue Fenster schließt. Die Variable Fenster existiert dann, und man gelangt immer in den else-Block.

function fenster()
{
    if(!self.fenster)
        {
            alert("Fenster nicht vorhanden und oeffne es!");
            fenster = window.open("seite1.html", "kl", "width=200,height=200");
        }
        else
            {
                alert("Fenster ist offen und hole es in den Vordergrung!");
                setTimeout("fenster.focus()", 200);
            }
}

Die zweite Möglichkeit führt mich immer in den if-Block, da ja das Fenster, in der die Funktion steht, nicht den Namen "kl" hat. Funktioniert würde es, wenn ich alle offenen Fenster nach Ihren Namen fragen könnte! Nun ich finde in den Dokus keine Eigenschaft oder Methode, wie man alle offenen Browserfenster nach dem Namen fragen könnte.

function fenster()
{
    if(!parent.kl)
        {
            alert("Fenster nicht vorhanden und oeffne es!");
            fenster = window.open("seite1.html", "kl", "width=200,height=200");
        }
        else
            {
                alert("Fenster ist offen und hole es in den Vordergrung!");
                setTimeout("fenster.focus()", 200);
            }
}

Gibt es eine Lösung? Ich vermute, da ich auf dem ganzen falschen Dampfer bin! :-)

Vielen Dank und MfG, André Laugks

  1. Hallo!

    Ich möchte prüfen, ob ein neu geöffnetes Fenster existiert. Ich habe keine Probleme, wenn man das Fenster automatisch öffnet, siehe auch <../../tecb.htm#a2>. Nur öffnet man das neue Fenster über einen Link. In diesem Fenster kann man sich durch Seiten klicken. Wenn nun das Mutterframe im Vordergrund ist und man auf den Link fürs neue Fenster klickt, soll das neue Fenster nur wieder in den Vordergrund geholt werden. Lasse ich es nochmal über fenster = open(...) laufen, wird seite1.html geladen.

    Ich führe mal zwei Beispiele auf. Das alert ist nur zu Testzwecken da!

    Die erste Möglichkeit funktioniert prächtig, solange man nicht das neue Fenster schließt. Die Variable Fenster existiert dann, und man gelangt immer in den else-Block.

    function fenster()
    {
        if(!self.fenster)
            {
                alert("Fenster nicht vorhanden und oeffne es!");
                fenster = window.open("seite1.html", "kl", "width=200,height=200");
            }
            else
                {
                    alert("Fenster ist offen und hole es in den Vordergrung!");
                    setTimeout("fenster.focus()", 200);
                }
    }

    Die zweite Möglichkeit führt mich immer in den if-Block, da ja das Fenster, in der die Funktion steht, nicht den Namen "kl" hat. Funktioniert würde es, wenn ich alle offenen Fenster nach Ihren Namen fragen könnte! Nun ich finde in den Dokus keine Eigenschaft oder Methode, wie man alle offenen Browserfenster nach dem Namen fragen könnte.

    function fenster()
    {
        if(!parent.kl)
            {
                alert("Fenster nicht vorhanden und oeffne es!");
                fenster = window.open("seite1.html", "kl", "width=200,height=200");
            }
            else
                {
                    alert("Fenster ist offen und hole es in den Vordergrung!");
                    setTimeout("fenster.focus()", 200);
                }
    }

    Gibt es eine Lösung? Ich vermute, da ich auf dem ganzen falschen Dampfer bin! :-)

    Vielen Dank und MfG, André Laugks

  2. Hallo!

    Ich möchte prüfen, ob ein neu geöffnetes Fenster existiert. Ich habe keine Probleme, wenn man das Fenster automatisch öffnet, siehe auch <../../tecb.htm#a2>. Nur öffnet man das neue Fenster über einen Link. In diesem Fenster kann man sich durch Seiten klicken. Wenn nun das Mutterframe im Vordergrund ist und man auf den Link fürs neue Fenster klickt, soll das neue Fenster nur wieder in den Vordergrund geholt werden. Lasse ich es nochmal über fenster = open(...) laufen, wird seite1.html geladen.

    :-( Mal öffters was genauer lesen vor dem Abschicken.

    Ich will das Fenster über eine Funktion öffnen. Und mit Mutterframe, meine ich das Mutterfenster. Also das Fenster, über das das neue Fenster geöffnet wurde.

    mfg, André Laugks

  3. oops - sorry - fuer das erste posting;

    zu lange gearbeitet - bin noch nicht wieder ganz fit;

    ..also 2ter versuch..

    Hallo von André,

    leider musst Du enttaeuscht werden:
      grundsaetzlich kann JavaScript nur auf eigenschaften und methoden
      von window-objekten zugreifen, die durch scripte erzeugt wurden:
      * ein fenster, welches mit <a href="..." target="_blank"  erzeugt
        wurde, "weis" nichts ueber seine "eltern" und steht deshalb fuer
        sich alleine - genauso "ahnungslos" geht das "erzeuger-fenster"
        mit seinem "elternglueck" um - scripte koennen also weder in
        die eine (opener.____) noch in die andere richtung ausgefuehrt
        werden;

    Nur oeffnet man das neue Fenster ueber einen Link.

    warum willst Du das Fenster ueber "<a href.." erzeugen, wenn es
      genausogut mit einem script geht ?  -  die loesung dafuer hast
      Du doch schon !  -  fuer browser, bei denen "JavaScript" nicht
      laeuft, kannst Du mit Deinem leicht modifizierten script trotzdem
      ein "konventionelles" fenster oeffnen:

    <html>
    <head>
    <title>...</title>
    <script language="JavaScript">
    <!--
    function fenster()
      {
      if(!self.fenster)
        {alert("Fenster nicht vorhanden und oeffne es!");
         fenster=window.open("seite1.html","kl","width=200,height=200");
        }
      else
        {
        alert("Fenster ist offen und hole es in den Vordergrung!");
        setTimeout("fenster.focus()", 200);
        }
      return false;
      }
    //-->
    </script>
    </head>
    <body>

    <a href="seite1.html" target="_blank" onklick="return fenster()">
    ....
    </a>

    </body>
    </html>

    hoffe, das hilft weiter - tschuess - peter - pseliger@gmx.net

    1. Hallo!

      leider musst Du enttaeuscht werden:
        grundsaetzlich kann JavaScript nur auf eigenschaften und methoden
        von window-objekten zugreifen, die durch scripte erzeugt wurden:
        * ein fenster, welches mit <a href="..." target="_blank"  erzeugt
          wurde, "weis" nichts ueber seine "eltern" und steht deshalb fuer
          sich alleine - genauso "ahnungslos" geht das "erzeuger-fenster"
          mit seinem "elternglueck" um - scripte koennen also weder in
          die eine (opener.____) noch in die andere richtung ausgefuehrt
          werden;

      Du öffnest 2 Browserfenster und jedem Fenster eine verschiedene Datei, einmal link.html und ziel.html.

      In der Datei link.html steht folgendes:
      <html>
      <body>
      <a href="http://www.yahoo.de" target="kl">Yahoo.de</a>
      </body>
      </html>

      In der Datei ziel.html steht dies:
      <html>
      <head>
        <script language="JavaScript">
         <!--
          self.name = "kl;"
         //-->
        </script>
      </head>
      <body>

      </body>
      </html>

      Beide Seiten werden nun in je einem Browserfenster geladen. Wenn Du auf den Link klickst, wirst Du sehen, das yahoo.de in dem Fenster geladen wird, in der die Seite ziel.html befunden hat.
      Das Fenster mit der Datei ziel.html wurde nicht über ein Script in der Datei link.html geöffnet. Woher weis nun das Fenster mit der Datei link.html, das es ein anderes Fenster mit dem Namen "kl" gibt.
      Beide Fenster haben miteinander keine Beziehung, also das eine hat nicht das andere geöffnet. Es muß also eine zentrale Stelle geben, die weis, wieviel Fenster offen sind und wenn sie einen Namen haben, wie er lautet.

      Und ich würde nun gern wissen, wie ich diese besagte Stelle auquetschen kann! :-)

      mfg, André Laugks

  4. Hallo André,

    function fenster()

    fenster = window.open("seite1.html", "kl", "width=200,height=200");

    :-) aber, aber Andre, Funktionsname und Variablenname sind gleich? Das verträgt sich überhaupt nicht. Beide müssen verschieden sein.

    Es gibt eine Alternative. Speichere den Fenstennamen in einem assoziativen Array. Dies ist gleichzeitig deine Fenstervariable, die du für den Zugriff brauchst.

    Beispiel:

    c=new Array()

    function fenster(x)
    {
    if (!window.c[x]) c[x]=window.open("links.htm",x);
    c[x].focus()

    }

    <a href="javascript:fenster('fenster1')">c["fenster1"]</a><br>
    <a href="javascript:fenster('fenster2')">c["fenster2"]</a>

    Viele Grüße
    Antje

    <img src="http://pc-anfaenger.de/pca/sam/pcanfaenger.gif" alt="">

    1. Hallo Antje!

      :-) aber, aber Andre, Funktionsname und Variablenname sind gleich? Das verträgt sich überhaupt nicht. Beide müssen verschieden sein.

      Es handelt sich um ein Tippfehler. Ich hatte das Script rein kopiert aber die Funktion vergessen. Ich hatte dann
      schnell      function fenster() {  }      geschrieben.
      Ich hatte aber echt mal das Problem, das ich in einem Script eine Funktion und Variable mit gleichen Namen hatte.
      Das war ein sehr aufwendiges DHTML Script, mit sehr viel Funktionen und Variablen. Die Funktion hatte
      ich am Anfang geschrieben und die eine Variable mit gleichen Namen, erst nach längerer Zeit angelegt.
      Ich war dann aufeinmal verblüft, das nichts mehr richtig funktionierte, bis mir nach sehr langer Zeit die
      Namensgleichheit aufgefallen ist.

      mfg, André Laugks

  5. Hallo,

    Ich gebe wieder, wie ich Dich verstanden habe:

    in einer Seite wird per Funktionsaufruf eine neues Fenster
    erzeugt:

    index.htm, darin:

    function fensterneu (theURL,winName,features) {

    fenster = window.open("neuesfenster.html", "neuesfenster",
    "width=200,height=200");
    fenster.focus()

    }

    <a href="#" onclick="fensterneu();return default">klick</a>

    In neuesfenster.html kann man jetzt ein wenig rumklicken.
    Gerät das Fenster in den Hintergrund oder wird zugemacht,
    kannst Du es einfach wieder neu öffnen, wenn jemand erneut
    auf klick klickt. Da wird nicht geprüft, ob die Datei vorhanden
    ist oder nicht, sondern einfach das Fenster neu gemacht.
    Sollte es Probleme mit den focus() geben, schreibe das einfach
    in <body onload="self.focus();">

    ---

    So, Lösung Nummer 2:
    Nachteil der Lösung 1 könnte sein, daß immer, wenn man auf
    "klick" klickt, neuesfenster.html geladen wird.
    Wenn sich jemand von neuesfenster1.html zu neuesfenster1.html
    geklickt haben, dann das neue fenster in den Hintergrund legt,
    und will dieses dann bei klick auf "klick" einfach nur
    wieder in den Vordergrund geholt werden, mit neuesfenster1.html
    im fenster "neuesfenster", dann probier folgendes script:

    <script language="JavaScript">
    <!--

    // ACH JA: es machst sich immer ganz gut, eine Variable
    // zu definieren, die, bevor sie eigentlich definiert wird
    // schon abgefragt werden könnte; vielleicht haben Deine
    // Probleme ja auch daran gelegen???
    fenster = null;

    function fensterneu(theURL,winName,features) {

    if (fenster) {
      if (fenster.closed == true)
        fenster = window.open(theURL,winName,features);

    else {
          fenster.focus();
        }
    }

    else {
        fenster = window.open(theURL,winName,features);
        fenster.focus()
      }
    }

    //-->
    </script>

    ---

    Lösung Nummer 1 funktioniert auch, wenn man von verschiedenen
    Seiten aus das neue Fenster öffnen kann; es wird ja im Script
    immer eins aufgemacht, egal obs schon da ist oder nicht.

    Lösung Nummer 2 funktioniert nur, wenn das neue Fenster nur
    von EINER Seite aus geöffnet wird. Lädst Du eine neue Seite
    index2.htm und klickst auf den dortigen "klick", dann kommen
    KEINE Fehlermeldungen, aber es wird ebenfalls einfach das
    neu Fenster neu aufgemacht und dort neuesfenster.html geladen.

    ---

    Ich hoffe, Dir damit geholfen zu haben.
    Wenn nicht, dann schick doch mal den Originalcode oder stell
    die Seiten online.

    mfg, Thomas Mock