Bei Logout alle Popups schließen javascript

pchilfe

Erfahrenes Mitglied
Hallo,

Ich habe folgendes Problem.

Ich möchte alle von einem eingebetteten Frams geöffneten windows beim Logout schießen falls welche vorhanden. Dafür habe ich folgende Script im Logout.php geschrieben:

function PopupClose() {
opener.close();
}

<body Onload =PopupClose();>

funktioniert aber nicht. Kann jemand mir einen Tip geben.

Vielen Dank im Vorraus
pchilfe
 
Was sind "Frams"? Solltest du unwahrscheinlicherweise Frames meinen, wo genau befinden sich diese? Das opener-Objekt bezieht sich nämlich eigentlich nur auf Mutter-Fenster von PopUp und nicht umgekehrt, wie du anscheinend annimmst, wenn ich das richtig verstanden habe. Außerdem heißt das Event nicht "Onload"...

Ich verstehe leider nicht genau was du willst, daher gibt's keine spezifischeren Tipps.
 
Hallo,
Entschuldigung für meine kurze Beschreibung. Mein Problem ist wie folgt:

Auf der Heuptseite befindet sich zwei eingebette Frames (Fr1, Fr2). Im Frame Name Fr2 wird eine Liste verschiene Produktnamen angezeigt. Wenn man auf den produktname klickt wird ein Fenster geöffnet. ich möchte nun wenn der Kunde auf dem Logout-Button klickt und sich auslogt dass alle geöffneten Fenstern geschloßen werden. Dafür habe ich ein Javascript geschrieben. Wird ausgeführt beim Aufruf vom Logout.php.

Code:
function Logout(){
    if(confirm('Wollen sie sich wirklich abmelden')) {
       opener.Fr2.close(); // hier sollen sich alle Popup geschlossen werden.
       location.reload('Logout.php');
       return true;
      }
    }

Ich habe alles versucht: parent.Fr2.close(); oder parent.opener.Fr2.close(); parent.document.Fr2.close(); es funktioniert nicht. :confused:

Die Eigenschaft: dependent=yes funktioniert nur im Netscape wenn der Kunde die Hauptseite schließt aber im Internet Explorer funktioniert diese Eigenschaft nicht.

Bitte um Hilfe und vielen Dank im Vorraus.
Gruß .. pchilfe
 
Okay, wie ich schon sagte kannst du mit opener nur von eine PopUp aus auf das öffnende Fenster zugreifen, du verwendest also das vollkommen falsche Objekt. Um alle Fenster zu schließen musst sie bereits beim öffnen Reffernziert haben und dann über dieses Referenz auf das PopUp zugreifen. Das geht am besten, indem du ein Array verwendest. Also statt nur window.open zum öffnen deiner PopUps verwede sowas:
Javascript:
var PopUps = new Array();

PopUps[PopUps.length] = window.open('URL','FENSTERNAME','PARAMETER');
so ist jedes geöffnete Fenster im Array PopUps gespeichert. Wenn du nun alle schließen willst machst du das mit diesem Code:
Javascript:
for (var i = 0; i<PopUps.length; i++)
    if (obj = PopUps[i])
        obj.close()
 
Zuletzt bearbeitet:
Hallo con-f-use,

Danke sehr für den Vorschlag. Habe dem entsprechend wie folgt gemacht:

In einer java.js habe ich folgenden funktionen geschrieben:

Zum öffnen der Produkte:
jedes Fenster wird nach der Produkt_id genannt. Die Funktion OpenProdukt(ProId, ProProName) wird vom Frame auf der Hauptseite aufgerufen. Es funktioniert und die Popups werden geöffnet.

Code:
// ein globales Array
var ProWnd = new Array();

// Open Produkt

function OpenProdukt(ProId, ProProName){

 eval(ProWnd[ProWnd.length]+' = window.document.open("Produkt.php?urlProName='+ProName+'", "'+ProId+'", "dependent = yes, width=468 height=505, top=0, left=0")');
 eval(ProWnd[ProWnd.length]+'.focus()');
 }

Die folgende Funktion wird von der Hauptseite aufgerufen wenn man auf dem Logout-Button klickt, müssen alle Popups geschlossen werden.
Code:
// Logout Close all Produkt Window

function CloseWnd(){
   for (var i=0; i<ProWnd.length; i++){
      if (obj = ProWnd[i])
         obj.close();
     }
}

Das Problem ist, dass keine einzige Popups wird geschlossen und ich erhalte keine Fehlermeldung. Also keine Reaktion.
habe versucht die Werte von ProWnd[i] auszugeben. Es zeigt immer : undefined
bin seit zwei tagen am herum Programmieren und beide funktionen immer wieder um schreiben trotzdem erhalte ich keine Fehlermeldung und komme nicht mehr weiter.
Wo liegt der Fehler? bitte um Hilfe.

Vielen Dank
 
Du solltest sowohl das Öffnen, als auch das Schliessen der Fenster nicht von den Frames aus erledigen, sondern über eine Funktion in dem Dokument, wo du das Frameset definierst.(der Aufruf dieser Funktionen kann natürlich aus den Frames heraus erfolgen)

Grund: sobald das Dokument in einem Frame entladen wird, sind auch die Variablen, die dir den Zugriff auf die Fenster erlauben, futsch.
Rufst du von den Dokumenten in den Frames aber eine Funktion im Mutter-Dokument auf, bleiben dortige Variablen erhalten... vorrausgesetzt, man lädt nicht das ganze Fenster neu.
 
ok habe jetzt alle Funktionen im Hauptdokument. also im index.php:

1) Funktion zum Fenstern öffnen:
Code:
function OpenProdukt(ProId, ProProName){

 eval(ProWnd[ProWnd.length]+' = window.document.open("Produkt.php?urlProName='+ProName+'", "'+ProId+'", "dependent = yes, width=468 height=505, top=0, left=0")');
 eval(ProWnd[ProWnd.length]+'.focus()');
 }

2) Zum Fenster schließen:
Code:
// Close all Produkt Window

function CloseWnd(){
   for (var i=0; i<ProWnd.length; i++){
      if (obj = ProWnd[i])
         obj.close();
     }
}

3) Logout Funktionen:
Code:
function Logout(){
    if(confirm('Wollen Sie sich wirklich abmelden?')) {
      CloseWnd();
     location.reload('Logout.php?urId=$strLang');
      }
    }

Im Frames über den Aufruf:
Code:
 top.OpenProdukt(ProId, ProProName) mit parent.OpenProdukt(ProId, ProProName) 
geht auch

rufe ich die Funktion zum öffnen. Funktioniert auch. Beim Klicken auf dem Logout Button wird die Funktion CloseWnd(); aufgerufen aber wie immer keine Fehlermeldung und die Fenster werden nicht geschlossen.
Kann es sein, dass die Bedingung:
Code:
if (obj = ProWnd[i])
falsch ist? ich habe es mit
Code:
if (ProWnd[i])
 ProWnd[i].close();

probiert auch keine Fehlermeldung und keine Reaktion.
Bitte weiterhin um Hilfe?
Vielen Dank
 
Zurück