seite in über-übergeordnetem frameset laden
Alex
- javascript
0 Stefan0 Alexander Foken0 Alexx
Hallo Forum!
im selfhtml hab ich die praktische lösung gefunden, wie man zwei frames gleichzeitig laden kann. aber nun möchte ich nicht die 1000 und 1. Frage stellen wie dies funktioniert(ich weiß, die ist hier im forum nicht besonders beliebt), sondern wie ich ideses script erweitern kann, damit ich frames tauschen kann, die nicht im parent. sondern eine Ebene darüber liegt.
also:
Datei home.htm:
<frameset>
<frame src="oben.htm">
<frame name="nav" src="nav.htm">
<frame name="mitte src="main.htm">
<frame src="unten.htm">
</frameset>
(unnötiges hab ich hier weggelassen)
Datei main.htm:
<frameset>
<frame name="leftFrame" src="links.htm">
<frame name="mainFrame" src="rechts.htm">
</frameset>
so, und jetzt möchte ich aus links.htm mit einem Link Frames aus _home.htm_ tauschen!
das script aus selfhtml (
function ZweiFrames(URI1,F1,URI2,F2) {
Frame1=eval("parent."+F1);
Frame2=eval("parent."+F2);
Frame1.location.href = URI1;
Frame2.location.href = URI2;
}
ist super, aber wie leite ich das ganze noch weiter nach 'oben'?
Frame1=eval("parent.parent."+F1); ...so wohl kaum?
ist sicher nicht schwer zu beantworten, aber ich find einfach nicht die richtige lösung in den (un-)tiefen des web.
lg
Alex
also i bin ma ja ned sicher ob i dei frage so ganz richtig verstanden hab ... ausserdem kommts ma komisch vor frames so zu verschachteln, aber ok.
möglicher Lösungsweg: statt parent top verwenden ... dann solltest du immer auf die höchste ebene, also auf die home.htm kommen. von da kannst dich dann wieder mit den bekannten pfad weiterarbeiten.
nicht getestet, keine garantie ... just try.
lg
StD
Moin Moin !
http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm
Und Du willst eval() nicht wirklich benutzen.
Alexander
Moin Moin !
Moin!
Danke für deinen tipp! die seite hatte ich gesucht.
href="javascript:top.nav.location.href='../../../nav/3/3_0.htm'; top.mitte.location.href='../../3/brunch/main.htm';"
funktioniert.
aber was hast du gemeint, mit "eval() möchtest du nicht benutzen? was ist falsch daran, oder besser, was soll ich stattdessen verwenden? an einer anderen stelle funktionierts problemlos so..
lg
A
Moin Moin !
aber was hast du gemeint, mit "eval() möchtest du nicht benutzen? was ist falsch daran, oder besser, was soll ich stattdessen verwenden? an einer anderen stelle funktionierts problemlos so..
Eval ist in den meisten Fällen absolut unnötig und immer ein Performance-Killer.
In Deinem Fall:
Alt:
function ZweiFrames(URI1,F1,URI2,F2) {
Frame1=eval("parent."+F1);
Frame2=eval("parent."+F2);
Frame1.location.href = URI1;
Frame2.location.href = URI2;
}
Neu:
function ZweiFrames(URI1,F1,URI2,F2)
{
parent.frames[F1].location.href=URI1;
parent.frames[F2].location.href=URI2;
}
Nebenbei hat der neue Code den Vorteil, auch mit illegalen Frame-Namen klarzukommen. Natürlich darf man ein Frame nicht "close()" nennen. Es geht aber trotzdem oft. Dein eval() schließt dann stumpf und dumm den parent (denn Du machst eval("parent.close()")), während die saubere Lösung über das assoziative Array frames[] auch dann noch funktioniert (parent.frames["close()"].location.href=URI1).
Außerdem: http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/index.htm -- wenn ich mich recht erinnere, fällt CK in dem Artikel kein einziger Grund mehr ein, eval() zu benutzen. Es geht alles ohne eval().
Alexander