Sven Rautenberg: Hauptbrowserfensters aus Pop-Up-Fenster steuern

Beitrag lesen

Aloha!

Ich möchte aus einem Pop-Up-Fenster heraus den Inhalt des Haupt-Browserfensters ändern (eine anderes Frameset laden).
Dies realisiere ich mit folgendem Java-Script-Code:

<script language="JavaScript"><!--
function load(file,target) {
        target.window.location.href = file;
}
//--></script>

<a href="javascript:load('b.html',top.opener)">Hauptseite laden</a>

Mein Problem:
Im Hauptfenster wird mein komplettes Frameset (b.html) immer nur in den oberen oder in den unteren Frame geladen (im Hauptfenster befindet sich schon ein Frameset). D.h. das "b.html" läd sich nie komplett als eigenständiges Framset sondern immer nur in einem der schon vorhanden Frames des Hauptbrowserfensters...

Du bist schon fast richtig.

Aber damit du für die Zukunft gerüstet bist, noch ein wenig Erklärung.

Wie ein Frameset javascriptmäßig angesprochen werden kann, ist bekannt. Wie man Popupfenster ansprechen kann, ist auch klar (fenstername = window.open(), fenstername.location.href).  Rückwärts aus dem Popupfenster geht das über opener (opener.location.href).

Du muß nun einfach beides schlau kombinieren und dabei bedenken, daß das Popupfenster zu dem Teilframe gehört, in dem window.open ausgeführt wurde.

Also:
Frameset im Hauptfenster: links + rechts.
In "rechts" wird ein Popup geöffnet, das "popup" heißt.
Im Popup wird eine Datei geladen.

Folgende Zugriffsmöglichkeiten auf "links" existieren jetzt.
Von links aus: self.location.href
Von top aus: links.location.href
Von rechts aus: top.links.location.href
Vom Popup aus: opener.top.links.location.href (das Popup ist ein Kindfenster von rechts!)

Wenn im Popup noch ein Frameset oben + unten geladen würde, käme man da so raus:

Von oben aus: top.opener.top.links.location.href

Wenn man von top aus zum Popup will, gibt es dafür diese Möglichkeit:
top.rechts.popup.location.href
Oder wenn das Frameset darin geladen ist:
top.rechts.popup.unten.location.href

Mit anderen Worten: Die Lösung für dein Problem ist, statt "top.opener" einfach "opener.top" zu verwenden, um das oberste Fenster desjenigen Browsers anzusprechen, der das Popup geöffnet hat.

- Sven Rautenberg