Henning: Offenes Fenster?- Abfrage

Hallo,

ich möchte von einem 'navigierenden' Fenster über Links neue Fenster öffnen. Allerdings soll davor getestet werden ob vorher geöffnete Fenster noch immer geöffnet sind und - falls das der Fall ist - diese dann geschlossen werden. Bei meinem Code-Versuch bitte nicht lachen:

function shutPrevious() {
 var popup = window.open();
 if (popup == true) {
  focus.window();
  close.window();
 }
}

...ja, und funktioniert nicht. Mir stellen sich folgende Fragen:

  • ist die Abfrage nach einem geöffnetem Fenster mit ' var x = window.open(); ' richtig durchgeführt? wenn nein, wie frage ich richtig ab?
  • ist das Schließen des Fensters mit focus.- und close.window durchführbar?
  • brauche ich ein 'else'?
  • ist es sinnvoll im EventHandler, der das neue Fenster öffnen soll, zuerst die shutPrevious-Funktion und dann eine zweite Fenster-öffnende Funktion aufzurufen, oder sollte ich den Text in eine Funktion schreiben?

Hört sich wahrscheinlich ziemlich unprofessionell an, und ist es auch, aber wäre gerade deshalb für Hilfe dankbar!

Gruß,
Henning

  1. Hallo Henning,

    • ist die Abfrage nach einem geöffnetem Fenster mit ' var x = window.open(); ' richtig durchgeführt? wenn nein, wie frage ich richtig ab?

    Ob Du mit der Variablen, die Du dem window.open() zuweist, irgendwas anfangen kannst, kann ich Dir nicht sagen (BTW: Mir ist der Sinn dieser Notationsart nie klar geworden - kann mir wer was dazu sagen?). Entscheidend ist vielmehr der zweite Parameter, den Du window.open übergibst - das ist der Name des neuen Fensters, und mit diesem Namen kannst Du es ansprechen.

    Nehmen wir als Beispiel (aus http://selfhtml.teamone.de/javascript/objekte/window.htm#open:

    window.open("datei.htm","Fenster1","width=310,height=400,left=0,top=0");

    Damit hat das Fenster den Namen Fenster1.

    Ob es geöffnet ist, kannst Du nicht direkt abfragen. Indirekt gibt es mehrere Möglichkeietn, die IMHO einfachste ist die Vewendung der Eigenschaft closed (http://selfhtml.teamone.de/javascript/objekte/window.htm#closed), die true ist, wenn das Fenster geschlossen wurde (setzt natürlich voraus, dass es schon mal geöffnet wurde - aber das tust Du ja). Ist die Eigenschaft false, ist das Fenster noch geöffnet. Die Abfrage müsste also lauten:

    if (Fenster1.closed == false)

    • ist das Schließen des Fensters mit focus.- und close.window durchführbar?

    Prinzipiell ja, allerdings hast Du ne verdrehte Syntax - und focus() brauchst Du nicht. In dem Fall wäre richtig:

    Fenster1.close();

    • brauche ich ein 'else'?

    Eigentlich nein, ich schreibe aber immer eins, nur zur Sicherheit.

    • ist es sinnvoll im EventHandler, der das neue Fenster öffnen soll, zuerst die shutPrevious-Funktion und dann eine zweite Fenster-öffnende Funktion aufzurufen, oder sollte ich den Text in eine Funktion schreiben?

    So eine shutPrevious-Funktion setzt ja immer voraus, dass Du weißt, welche Fenster geöffnet sind. Natürlich kannst Du alle Fenster, die potentiell geöffnet sein könnten, durchgehen. Dann würde ich allerdings zuerst prüfen, ob der Fensternamen schon mal existiert hat.

    Hier ein ungetestes Beispiel, das ein denkbares Prinzip erklärt, aber fehlerhaft sein könnte:

    function shutPrevious() {
      if (Fenster1 && Fenster1.closed == false) {
        Fenster1.close();
        }
      if (Fenster2 && Fenster2.closed == false) {
        Fenster2.close();
        }
      }

    function openWin(sUrl, sWindowName) {
      shutPrevious();  // shutPrevious() wird bei jedem Aufruf von openWin() ausgeführt
      window.open(sUrl, sWindowName, "width=310,height=400,left=0,top=0");
      }

    und als Link im HTML dann:

    <a href="Datei1.htm" onclick="openWin('Datei.htm', 'Fenster1'); return false;">...</a>

    Das ist natürlich beliebig variierbar und soll bloß ne Gedankenhilfe fürs Erste sein.

    Grüße,

    Utz