Hallo zusammen!
Mitlerweile ist mir eine brauchbare Lösung zu dem Problem eingefallen. Um den Thread abzuschließen möchte ich die Lösung hier gerne vorstellen.
Szenario wie in der Fragestellung:
- Frame B ändert seinen Inhalt
- Frame A reagiert darauf durch eine beliebige Javascript-Aktion
Da B seinen Inhalt stets durch den Aufruf einer Javascript-Funktion ändert, kann den anderen Frames die Änderung im gleichen Atemzug mitgeteilt werden. B darf dabei annehmen, dass sich in jedem Frame die Variable "current_html" und die Funktion "after_addressing_frames()" befinden:
- Variable "current_html": Speichert die aktuelle URL
- Funktion "after_addressing_frames()": Startet alle "Reaktionen" des Frames A
Anders gesagt, kapselt die Funktion "after_addressing_frames()" alle nötigen Funktionsaufrufe. Die Namen aller Reaktions-Funktionen (0..n) müssen der Funktion "after_addressing_frames()" zunächst bekannt gemacht werden. Das geschieht widerrum durch eine weitere Funktion:
- Funktion "register_function(new_function)": Einen Funktionsaufruf in "after_addressing_frames()" bekannt machen:
//Die Funktion wird als "Leer"-Funktion initialisiert
function after_addressing_frames(){}
//Registrieren von Funktionsaufrufen in after_addressing_frames()
function register_function(new_function)
{
var after_addressing_frames_old = after_addressing_frames;
after_addressing_frames = function()
{
after_addressing_frames_old();
new_function();
}
}
Um das Beispiel fortzuführen, geht man nun davon aus, dass A eine HTML-Datei mit folgender Javascript-Funktion zur Verfügung stellt, mit der auf wechselnde Inhalte in B reagiert werden soll:
//Ausgabe der aktuellen URL
function gibaus(){alert(current_html);}
Diese Funktion muss in "after_addressing_frames()" registriert werden, damit sie bei einem Seitenwechsel in einem fremden Frame automatisch aufgerufen wird:
//Registrieren der Funktion "gibaus()"
register_function(gibaus);
Ein Aufruf der Funktion "after_addressing_frames()" erzeugt nun ein Alert-Fenster. Theoretisch könnte man "gibaus()" mehrfach registrieren, was bei einem Aufruf von "after_addressing_frames()" mehrere aufeinanderfolgende Alert-Fenster zur Folge hätte. Auf die gleiche Weise lassen sich beliebig viele, unterschiedliche Funktionen registrieren, die zeitgleich mit dem auslösenden Inhaltswechsel ausgeführt werden, und die dank der Variable "current_html" sofort auf die neue URL zugreifen können.
Viele Grüße,
Tobias S.