Link aus Popup ins Elternfenster

Wie läßt sich aus einem als Popup geöffneten Fenster die Mutterseite ansprechen? – Du hast dazu drei, eigentlich vier Möglichkeiten.

Popup per Link

Schreibe die Anforderungen direkt in den Link im Popup:

<a href="javascript:void(opener.location.href='bestaetigungsseite.htm')">
  LINK ZUR MUTTERSEITE</a>

Diese Version eignet sich eher, wenn Du nur einen derartigen Link anbietest.

Ausgelagerte Funktion im head

Schreibe eine Funktion in den head der Seite, die im Popup aufgerufen wird, und rufe mit dem Verweis diese auf:

<script type="Text/JavaScript">
<!--
function executeLink(url) {
  opener.location.href=url;
}
//-->
</script>

Und der Verweis:

<a href="javascript:void(executeLink('bestaetigungsseite2.htm'));">
  LINK ZUR MUTTERSEITE</a>

Die zweite Version ist eher dann sinnvoll, wenn Du mehrere derartige Links anbietest.

Gleichzeitiges Schließen des Popups

Damit sich das Popup selbst automatisch schließt, schreibst Du einfach self.close() dazu:

<a href="javascript:void(opener.location.href='bestaetigungsseite3');self.close();">
  LINK ZUR MUTTERSEITE</a>

Gleichzeitiges Schließen mit Funktion

Die letzte Variante entspricht einer Mischung aus der zweiten und der dritten – das self.close() wird in die Funktion eingefügt:

<script type="Text/JavaScript">
<!--
function executeLink(url) {
  opener.location.href=url;
  self.close();
}
//-->
</script>

Und der Link dazu:

<a href="javascript:void(executeLink('bestaetigungsseite4.htm'));">
  LINK ZUR MUTTERSEITE</a>

Wenn Du nicht möchtest, daß sich bei sämtlichen über diese Funktion aufgerufenen Links das Fenster selbst schließt, mußt Du diese Anweisung aus der Funktion herausnehmen und nur bei den betreffenden Links einfügen. Dann schließt sich das Fenster nur bei den Links, bei denen Du das explizit angegeben hast.

Probleme mit frames

Wenn die Mutterseite aus einem frameset besteht, dann öffnet sich die neue Seite in demjenigen frame, von dem aus das Popup aufgerufen wurde (opener). Um nun das frameset zu „löschen“ und also die neue Seite über das ganze Fenster anzeigen zu lassen, mußt Du folgende Zeile abändern:

opener.location.href=url;

Stattdessen schreibst Du dieses:

opener.top.location.href=url;

Um die Seite in einem anderen frame zu öffnen als dem, aus dem das Popup geöffnet wurde, muß die Zeile so lauten:

opener.parent.Framename.location.href=url;

opener spricht den frame an, aus dem das Popup geöffnet wurde. parent spricht das Elternfenster des frames an, also das frameset. Framename spricht den frame an, in dem die Seite geöffnet werden soll. Der Name ist frei wählbar, allerdings muß auf Groß-/Kleinschreibung geachtet werden. ACHTUNG!!! Die frames müssen in diesem Fall alle einen Namen haben, sonst können Sie per JavaScript nicht so einfach angesprochen werden!

Wenn als der frame, in dem Du die Seite öffnen willst, z. B. „main“ heißt, muß die Syntax so lauten:

opener.parent.main.location.href=url;

Die Methode javascript:void() gibt keinen Wert zurück, folglich wird die ausführende Seite nicht verändert, während bei Aufruf mittels javascript:anweisung der Rückgebewert [object] auf der aufrufenden Seite erscheint. Wenn Du genauere Informationen über den Zugriff auf verschachtelte Objekte haben willst, empfehle ich Dir folgende Seite: http://selfaktuell.teamone.de/tippstricks/javascript/fensterzugriff/index.htm

Anmerkung: Ansprechen von frames per Indexnummern

Möglich ist auch ein Ansprechen der frames per Indexnummern, aber davon rate ich eher ab, da sich viele, vor allem Anfänger, hier bei der Nummerierung vertun und dann nicht mehr weiterwissen. Grundsätzlich beginnt die Nummerierung mit 0. Die Indexnummern werden in der Reihenfolge vergeben, in der die frames im frameset angeführt sind.

Viel Spaß!
Jane & Kurt

Angelegt: Vor meiner Zeit
Letzte Bearbeitung: 2005/06/11 / 14:11:01