[JS] Fenster öffnen, aber nur wenns noch nicht geöffnet wurde

flaschenkind

Well-known member
ID: 118459
L
20 April 2006
4.507
337
Ich möchte mit JavaScript ein Fenster öffnen, aber nur wenn es noch nicht geöffnet ist. Also hab ich mir gedacht, ich überprüfe ob es schon geöffnet ist. Aber wie soll ich das machen, so dass es keine Fehlermeldung gibt? Mit if(fenster) gehts nicht, erst wenn das Fenster vorher schonmal offen war, so dass die Variable gesetzt ist. Sonst gibts nen has no properites Fehler.

Ich hab mir bis jeztt folgendes gedacht:
PHP:
function show_site(){
  if(fenster){
    alert('Sie haben bereits eine Seite geöffnet. Bitte schließen Sie diese erst!');
  }
  else{
    fenster = window.open('seite.html');
  }
}

So geht das nicht, dann hab hab ich an den Anfang var fenster; gesetzt, damit ist dann schonmal der Fehler weg. Allerdings weiß ich dann noch nicht so recht, wie ich überprüfe, ob das Fenster noch offen ist. Hab ich mir gedacht, ich versuchs mal mit fenster.closed == true aber das geht nicht, weil ich fenster ja nur als normale Variable gesetzt habe, und dadurch gibt es da noch kein .closed.
Wie kann ich das also am besten machen, dass ich auch mitbekomme wenn das Fenster geschlossen wurde, damit ich die Möglichkeit habe wieder ein neues Fenster zu öffen?
 

burnred

Powerhamster
ID: 34739
L
4 Mai 2006
684
40
setz doch den Anfangswert von fenster auf null und überprüfe oder der noch null ist. Wenn nicht ist dein Fenster schon mal geöffnet wurden und wenn es geschlossen wird setzt die fenster wieder auf null zurück.
 

flaschenkind

Well-known member
ID: 118459
L
20 April 2006
4.507
337
setz doch den Anfangswert von fenster auf null und überprüfe oder der noch null ist. Wenn nicht ist dein Fenster schon mal geöffnet wurden und wenn es geschlossen wird setzt die fenster wieder auf null zurück.
Ja, so könnte man es machen, aber wie mach ich dass fenster beim schließen wieder auf null zurück gesetzt wird? Über nen onclose oder gibts da elegantere Methoden? Automatisch gings jetzt jedenfalls nicht ;)
 

burnred

Powerhamster
ID: 34739
L
4 Mai 2006
684
40
kann du doch direkt nach dem Öffnen machen...
ich geb keine Garantie das das funktioniert
Code:
var fenster = null;
function openWindow()
{
[INDENT]if(fenster == null)
{
[INDENT]fenster = window.open("[...]");
fenster.onunload = closeWindow;
[/INDENT]}
[/INDENT]}
function closeWindow()
{
[INDENT]fenster = null;
[/INDENT]}
 

flaschenkind

Well-known member
ID: 118459
L
20 April 2006
4.507
337
Funktioniert nicht. Der ruft das irgentwie schon beim öffnen auf und auch beim schließen (getestet mit alert).
Habs dann so versucht:
PHP:
function closeWindow(){
  if(fenster != null && fenster.closed == true){
    fenster = null; 
  }
}

Aber so will das auch nicht :-?
Mit nem ||gehts auch nicht, weil ich dann was zu hören bekomme von wegen fenster has no properites.
 

Moloc

Well-known member
ID: 109565
L
28 April 2006
153
17
Code:
<html>
  <head>
    <title>Fenster Demo</title>
    <script type="text/javascript">
      var fenster = null;
      function openWindow(){ 
        if( !fenster || fenster.closed ) {
          fenster = window.open("fenster.html");
        }
      } 
    </script>
  </head>
  <body>
    <input type="button" onclick="openWindow();" value="fenster öffnen" />
  </body>
</html>

Erfolgreich getestet in IE7, Opera, FireFox und Safari.