Mehrere Frames gleichzeitig tauschen + Back-Button
marcus.s
- javascript
0 Philipp0 Sven Rautenberg
Hallo!
Ich habe nach Vorbild verschiedener Foren mit folgendem Code die Möglichkeit eingebaut, mehrere Frames gleichzeitig zu tauschen.
<SCRIPT LANGUAGE="JavaScript"><!--
function ZweiFrames(frame1, url1, frame2, url2){
frame1.location.href = url1
frame2.location.href = url2}
//--></SCRIPT>
-&-
<A HREF="javascript:ZweiFrames(parent.B.C, 'cc.html',
parent.B.D, 'dd.html')">hier klicken</A>
So. Und soweit geht das auch ganz gut, nur in die Gegenrichtung nicht. Sprich, wenn man nun auf den 'back'-Button klickt, wird zunächst nur der Tausch des zweiten Frames rückgängig gemacht, und auf den zweiten klick erst der ursprüngliche Zustand hergestellt. Ich habe auf einigen Seiten, auf denen offensichtlich mehrere Frames gleichzeitig getauscht werden ähnliches Verhalten beobachtet.
Leider ist das aber wegen dem zu Grunde Liegenden Design sehr schlecht, da es nicht "offensichtlich" sein sollte, dass sich hier verschiedene Frames ergänzen. Außerdem passt der angezeigte Content nicht mehr, wenn nur einmal auf 'back' geklickt wird und so der inhalt zwei verschiedener "Seiten" vermischt wird.
Wer weiß Abhilfe? Warum wird die eine JavaScript-Funktion als mehrere 'Schritte' interpretiert??
Ich weiß, dass ich einen "zurück"-Button programmieren könnte, der mir jedesmal zwei Stufen zurück springt, aber es muss mit dem Browserinternen Button auch funktionieren.
PS: Ich beziehe mich hier auf IE5.5 sowie NS 4.7
Vielen Dank im Voraus!!!!
marcus
Mahlzeit!
Ohne Gewehr und Pistole, dass das auch bei Dir funktioniert und für Dich was ist.
Ich habe auf meiner Seite auch so ne wilde Framewechselei und habe das so gelöst:
____________________________________
|
FRAME 1 |
____________________________________|
F | |
R | |
A | |
M | FRAME 3 |
E | |
| |
2 | |
_______|____________________________|
Frame 1 der TOP-Frame (Überschrift, Bild etc.)
FRAME 2 ist der Menüframe
Frame 3 der Contentframe
ein ganz normaler target-Link in Frame 2 (Menü) ändert den Frame 3, dort wird die Zweiframes-Funktion aufgerufen und die ändert Frame 1 und Frame 2
Allerdings habe ich für meine Funktion folgende Befehle genommen:
parent.frames[0].location.replace('toppage_1.htm'); ändert FRAME 1
parent.frames[1].location.replace('menue_1.htm'); ändert FRAME 2
weil replace irgendwas in der History "replaced". Vielleicht kann Dir das noch jemand anderes hier genauer erklären wieso, weshalb, warum. Für mich liegt es schon etwas länger zurück. Die replace-Geschichte ist auch in SELF-Html erklärt, da hab ich es nämlich her. :-)
Gruß
Philipp
parent.frames[0].location.replace('toppage_1.htm'); ändert FRAME 1
parent.frames[1].location.replace('menue_1.htm'); ändert FRAME 2
Danke für deine Hilfe! Ich werde der Sache insbesonders dem '.replace' nachgehen.
Ich schätze du hast den Aufruf der Frames 1 und 2 im Frame 3 unter "onLoad" im <body>-Tag untergebracht.
melde mich, wenn ich weiß, obs funktioniert.
bis dahin...
danke
marcus
Hallo Marcus!
Ja genau, hatte ich vergessen:
<body bla,bla,bla onload="zweiframes()">
:-)
Philipp
parent.frames[0].location.replace('toppage_1.htm'); ändert FRAME 1
parent.frames[1].location.replace('menue_1.htm'); ändert FRAME 2
melde mich, wenn ich weiß, obs funktioniert.
Hallo!
Die neuen JavaScript-Zeilen die mit ".replace" die Frames tauschen tun ihre Arbeit tadellos, nur leider ist hier auch ein einfacher Weg "Zurück" nicht möglich: Es gibt nämlich gar keinen! .replace scheint, wie du bereits erwähnt hast den letzten History-Eintrag zu ersetzen. Womit nichteinmal ein eigener Button (<a href="javaScript:hitory.back();">Zurück</a>)(hoffe ich habe mich nicht vertippt;) hier mehr abhelfen dürfte.
Auch ein HTML Link der das erste Frame tauscht, welches dann mittels 'onLoad=""' im body-Tag die anderen lädt, hilft nicht. Hier wird beim Klick auf "Zurück" nur das eine (über html geladene) Frame wiederhergestellt. :-(
Nun, ich habe jetzt eine Version, bei der man durch mehrmaliges klicken auf den 'Back'-Button erst der Reihe nach alle getauschten Frames rückgängig machen kann, und eine Version, bei der es garnicht zurück geht.
Gibt es kein Mittelding?!
In den meisten Foren heißt es, dass dies eine der meistgestellten Fragen ist, aber gibt es keinen Weg, der mit einem Klick auf 'back' das vollbringt, was sich der Webseitenbesucher erwartet? ..das zu sehen, was er sah, bevor sich die Frames tauschten...
Aber ich gebe nicht auf ;-) und bin weiterhin für jeden Tipp dankbar.
marcus
Hallo Marcus,
Die neuen JavaScript-Zeilen die mit ".replace" die Frames tauschen tun ihre Arbeit tadellos, nur leider ist hier auch ein einfacher Weg "Zurück" nicht möglich: Es gibt nämlich gar keinen! .replace scheint, wie du bereits erwähnt hast den letzten History-Eintrag zu ersetzen. Womit nichteinmal ein eigener Button (<a href="javaScript:hitory.back();">Zurück</a>)(hoffe ich habe mich nicht vertippt;) hier mehr abhelfen dürfte.
Fein, dass du das erkannt hast! Und vielleicht verstehst du jetzt auch eher die Loesung, die in http://selfhtml.teamone.de/javascript/beispiele/zweiframes.htm vorgeschlagen wird, naemlich die Back- und Forward-Funktionalitaet in eigene Links zu legen. Es ist nun mal so, dass der Back-Button im Browser mit Frames inkompatibel ist - das ist einer der zahlreichen Nachteile von Frames. Anders ausgedrueckt: Wenn du schon anfaengst, mit Hilfe von JavaScript zwei Frames gleichzeitig zu aendern, dann liegt es auch an dir als Programmierer, die entsprechende Back-/Forward-Funktionalitaet selber zu programmieren. Denn du hast den Browser mit dem Doppel-Link ueberlistet, also musst du das auch selber wieder ausbuegeln.
viele Gruesse
Stefan Muenz
Moin!
Wer weiß Abhilfe? Warum wird die eine JavaScript-Funktion als mehrere 'Schritte' interpretiert??
Ich weiß, dass ich einen "zurück"-Button programmieren könnte, der mir jedesmal zwei Stufen zurück springt, aber es muss mit dem Browserinternen Button auch funktionieren.
PS: Ich beziehe mich hier auf IE5.5 sowie NS 4.7
Ganz einfache Lösung: Lade ganz ohne Javascript einfach ein neues Frameset, welches deine zwei anzuzeigenden Dateien enthält. Dann klappts auch mit dem Zurückbutton, und sogar mit allen Browsern, die kein Javascript können, und darüber hinaus auch mit Browsern, die Frames zwar nicht direkt anzeigen, aber zumindest als Link präsentieren können.
<a href="neuesframeset.html" target="_top">Link</a>
- Sven Rautenberg