Tobias S.: Ausführliche Vorstellung einer brauchbaren Lösung des Problems

Beitrag lesen

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.