Datei dynamisch in Frameset laden
madmax31337
- html
hi
wie man am thema sehen kann geht es darum eine seite in ein frameset zu laden, auch wenn sie direkt geöffnet wurde. dafür gibt es bei selfhtml einen schönen artikel:
Datei dynamisch in Frameset laden:
-----------------------------------
http://aktuell.de.selfhtml.org/artikel/javascript/dyn-frames/index.htm
das problem:
mit den info's aus dem artikel kann man erreichen das die entsprechende seite auf jeden fall im frameset geladen wird, ABER dann tut sich ein neues problem auf. es ist nicht ganz leicht zu erklären, aber ich versuche es mal:
gehen wir mal davon aus das es 2 frames gibt, ein frame auf der linken seite, dieses frame erhält den namen "left", und enthält die links zum navigieren
und dann gibt es noch ein frame, es hat den namen "main", und in diesem frame sollen die links angezeigt werden die man im linken frame anklickt. damit das funktioniert müssen die link-tags logischerweise als target attribut den wert "main" erhalten
bis hier hin funktioniert alles so wie es soll, aber stellen wir uns mal vor jemand klickt einen link das sich im frame "left" befindet mit der rechten taste an, und öffnet ihn in einem neuen fenster.
da als target ja "main" angegeben ist, erhält das neue fenster auch den namen "main". unserer javascript sorgt jetzt dafür das die seite im frameset geladen wird, und nun gibt es folgendes problem: es existieren 2 frames mit dem namen "main".
javascript:alert(top.name); // gibt "main" zurück
javascript:alert(top.frames[1].name); // gibt auch "main" zurück
das liegt daran das die name eigenschaft eines fensters so lange erhalten bleibt wie es geöffnet ist. und das ganze führt nun dazu das wenn man im frame "left" einen link anklickt dieser nicht mehr im dafür vorgesehenen frame geöffnet wird, sondern immer im top level frame ...
falls das zu kompliziert war, sagt es dann code ich ein bsp. wo ihr es selbst testen könnt.
die frage ist nun, kann man das problem irgendwie lösen ?
mfg
Hallo,
die frage ist nun, kann man das problem irgendwie lösen ?
"verwende keine Frames" als Antwort hilft dir nicht wirklich weiter, oder? :)
mfg NAG
Hi,
"verwende keine Frames" als Antwort hilft dir nicht wirklich weiter, oder? :)
Nicht im Ansatz auf das vermeintliche Problem eingehendes Stammtischgeschwätz hilft i.d.R. *nie* weiter! >;->
Gruß, Cybaer
Hi,
da als target ja "main" angegeben ist, erhält das neue fenster auch den namen "main".
Das wäre mir neu. Das eue Fenster hat bei einem Rechtsklick keinen Namen von TARGET übernommen.
falls das zu kompliziert war, sagt es dann code ich ein bsp. wo ihr es selbst testen könnt.
Jo, *das* möchte ich sehen!
die frage ist nun, kann man das problem irgendwie lösen ?
Welches Problem?
Gruß, Cybaer
da als target ja "main" angegeben ist, erhält das neue fenster auch den namen "main".
Das wäre mir neu. Das eue Fenster hat bei einem Rechtsklick keinen Namen von TARGET übernommen.
tja, man lernt eben nie aus ...
falls das zu kompliziert war, sagt es dann code ich ein bsp. wo ihr es selbst testen könnt.
Jo, *das* möchte ich sehen!
bitte:
http://www.underground-development.de/problem/
anleitung zur demo des problems:
1.) die seite besuchen, alles funzt, top.name="" und self.name="main"
2.) navi link mit der rechten taste anklicken und öffnen, top.name="main" und auch self.name="main"
3.) wenn man im neuen fenster nun einen navi link klickt, dann wird der immer im top level frame geöffnet, weil der name "main" aus dem traget attribut des links ins neue fenster übernommen wurde
PS:
ich hab den IE 5.5 verwendet ...
die frage ist nun, kann man das problem irgendwie lösen ?
Welches Problem?
siehe demo
mfg
Hi,
tja, man lernt eben nie aus ...
LOL, da sagste was! :-))
Aber typisch IE. Mozilla macht das natürlich nicht. >;->
die frage ist nun, kann man das problem irgendwie lösen ?
Also ich habe gerade keine Zeit, da groß drüber nachzudenken, aber auf die schnelle, kann man dem IE ja mal diese Unart abgewöhnen! >;->
Wenn das Frameset nachgeladen werden soll, dann location.replace(). Wenn aber nicht, dann ein top.window.name="". Dann werdeen die Frames wohl wieder ordnungsgemäß geladen. :-)
Und, BTW:
Ich wollte mir die Dateien zum Offline-Testen und editieren auf die Platte holen. Da ist eine solche "festverdrahtete" Zeile
location.replace("index.php?" + document.URL.substring("http://www.underground-development.de/problem/".length));
ziemlich störend. Folgende Zeile hat die gleiche Wirkung
location.replace("index.php?" + document.URL.substring(document.URL.indexOf("problem")+8));
funktioniert aber immer, sofern die Dateien in einem Ordner "problem" liegen (eleganter und ohne Ordnerangabe ginge es natürlich auch, aber auf die Schnelle ... ;-))
Gruß, Cybaer
PS: Nette Optik! :-)
Hi,
da als target ja "main" angegeben ist, erhält das neue fenster auch den namen "main".
Sodele, ein paar Tests später:
Die schlechte Nachricht:
Der IE übernimmt den TARGET-Namen auch bei einem Shift-Linksklick. =:-/
Die gute Nachricht:
Anders als bei "fremddefinierten" Fensternamen, bleibt beim IE die Änderung via window.name hier erhalten. D.h., einmal den doppelten Namen gelöscht, hat man zukünftig seine Ruhe.
Aber bevor man einfach willkürlich den Namen löscht, sollte man ihn vorher auch noch mit dem Framenamen vergleichen. Und, BTW, ein Framename sollte IMHO schon *deutlich* spezifischer/einzigartiger sein als ausgerechnet "main" und "left". =;-)
Und wo ich gerade dabei bin ;-):
Wenn man jeder Content-Seite ein eigenes Frameset gönnt (was ja nicht gerade ein Problem ist, wenn man ohnehin PHP verwendet), wäre dieses IE-Verhalten auch kein Problem.
Und insbesondere bei, wie hier, "ein Frameset für alles"-Seiten, wäre es IMHO ohnehin mehr als eine Überlegung wert, den User *nicht* in ein Frameset zu *zwingen* (Zwang ist IMHO ohnehin immer schlecht). Ich finde es jedenfalls besser, wenn man zwar einerseits das FS nachladen lassen kann (automatisch via JS und zusätzlich manuell via Button), aber wenn der User aus dem FS explizit ausbrechen möchte, dann darf man ihm das doch durchaus erlauben. Beides, automatisches Nachladen und "Ausbruchsmöglichkeit", läßt sich auch problemlos gleichzeitig verwirklichen.
Und auch dann wäre das window.name-Verhalten des IEs keiner Erwähnung wert gewesen! 8-)
Und, last but not least: Den Framedateinamen im URL würde ich ggf. nicht mit JS, sondern mit PHP auswerten. Dann bereitet die Weitergabe eines solchen Links auch Surfern ohne JS keine Probleme. ;-)
Gruß, Cybaer