Hallo!
Ich weiß nicht, ob das Problem mit dem Back-Button bei der Änderung mehrerer Frames mit einem Link schon gelöst ist. Hier mein Vorschlag, der in Tests funktioniert hat:
Vorab: Sollten die erklärten Funktionen in dieser Mail nicht angezeigt werden, werden Sie vom Browser als Quellcode interpretiert. Bitte in diesem Fall den Quellcode der Mail ansehen!
Frameset mit drei Frames
0: Navigation
1: z.B.: Überschrift
2: Hauptseite
A. Quelltext zum Ändern der Frames 1 und 2 durch Link im Frame 0:
1. Funktion im Dateikopf der Frame 0-Datei:
------------------------------------------------------
function ZweiFrames(URL1,F1,URL2,F2)
{
parent.frames[F1].location.replace(URL1);
parent.frames[F2].location.href=URL2;
}
------------------------------------------------------
2. Aufruf der Funtion beim Anklicken des Links in Frame 0:
------------------------------------------------------
<A HREF="javascript:ZweiFrames
('frame1datei.htm',1,'_frame2datei.htm',2)">Frames ändern</A>
------------------------------------------------------
Folge: Nur die URL der letzten Datei bleibt in der History stehen. Beim Betätigen des Back-Buttons wird diese Seite in den Frame 2 geladen.
B. Beim Zurückspringen auf diese Seite muß die passende Seite in den Frame 1 geladen werden. Dies geschieht mit Hilfe einer Funktion, die überprüft, ob im Frame 1 bereits die richtige Seite steht. Andernfalls wird sie nachgeladen. Diese Funktion steht mi Kopf der Frame 2-Datei und wird onLoad ausgeführt.
Wichtig ist, daß alle HTML-Dokumente, die in Frame 2 stehen, mit einem _ (Unterstrich) beginnen. Dieser darf sonst im Pfad (URL, Verzeichnisnamen) nicht vorkommen. Außerdem sollte die passende Datei für Frame 1 im gleichen Verzeichnis liegen (Bei anderem Verzeichnis entspr. mit ../ anpassen).
------------------------------------------------------
function checkframes()
{
/* Pfad der Infoseite im Hauptframe ermitteln und speichern. */
var Infodatei = "'" + parent.frames[2].location + "'";
/* Startposition des Dateinamens ermitteln und speichern. */
var Schnitt = Infodatei.indexOf("_") - 1;
/* Pfad um Dateinamen kürzen und speichern. */
var Verzeichnis = Infodatei.substr(1,Schnitt);
/* Prüfen, ob Frame1 den richtigen Inhalt anzeigt, ggf. ersetzen. */
if (parent.frames[1].document.location != Verzeichnis
+ "frame1datei.htm")
parent.frames[1].location.replace(Verzeichnis + "oben01.htm");
Aufruf der Funktion:
<BODY onLoad="checkframes()">
Die Datei im Frame 1 wird also nur geladen, wenn Sie nicht ohnehin bereits angezeigt wird (dies ist z. B. bei Betätigung des Links "Frames ändern" (s. o.) der Fall.).
liegt die Frame2-Datei in einem untergeordneten Verzeichnis /docs, muß der Pfad mit indexOf nach der Zeichenkette docs/_ durchsucht werden. Liegt die Frame1-Datei in einem anderen Verzeichnis, muß die Variable "Verzeichnis" um den zusätzlichen Pfad ergänzt werden:
Verzeichnis + "/zusVerz/frame1datei.htm".
So, ich hoffe, ich habe diese zugegebenermaßen etwas umständliche Lösung einigermaßen verständlich erklärt. Notwendige Anpassungen können sich aus der Verzeichnisstruktur Euerer Webseite ergeben.
Hierzu kann ich nur das ausführliche Studium von SELFHTML empfehlen. Wirklich ein großes Kompliment an den Autor!!!
Tschüss
Oliver Beyer
P.S.: Bei Verwendung der Funktionen würde ich mich über einen kurzen Hinweis auf den Urheber freuen.