aus iframe zwei frames ändern ??
vinter
- https
Habe ein kleines Problem mit meinem iframe.
Und zwar: meine Seite hat 3 Frames und einen iframe. Aus diesem iframe heraus will in nun zwei Frameseiten per Link ändern (die Navigation und das Hauptfenster, in dem auch der iframe liegt).
Ohne iframe habe ich das schon öfter gemacht aber mit iframe geht das nicht. Wie kann man das lösen?
Grüße vinter
Hallo "vinter",
Ohne iframe habe ich das schon öfter gemacht aber mit iframe geht das nicht. Wie kann man das lösen?
Es kommt nur darauf an, aus einem Frame heraus auf das Elternobjekt, eventuell noch auf dessen Elternobjekt zuzugreifen und dann dort wieder im Hierarchiebaum "runterzugehen". Dazu finden sich massig Threads im </archiv/> oder sogar noch in der aktuellen Forumshauptdatei.
Wahrscheinlich wird Dir dieser Artikel in SELFHTML helfen:
http://selfhtml.teamone.de/javascript/objekte/frames.htm
Hallo, Tim, *smirk*
Ohne iframe habe ich das schon öfter gemacht aber mit iframe geht das nicht. Wie kann man das lösen?
Es kommt nur darauf an, aus einem Frame heraus auf das Elternobjekt, eventuell noch auf dessen Elternobjekt zuzugreifen und dann dort wieder im Hierarchiebaum "runterzugehen". (...)
Diesbezüglich würde ich eher http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/ vorschlagen, daran wird dieses hoch- und herunterbewegen anschaulich erklärt.
(Aber wieso »DOM«-Hierarchie, mit dem DOM hat es doch meines Wissens wenig zu tun...? DOM an sich hat mit Fensterobjekten wenig zu tun, dachte ich... Bin mir selbst unsicher, lass das Thema einmal stehen. *duck*)
<metadiskussion>
Hallo "vinter",
Woher weißt du, dass ich »Mathias« heiße und warum schreibst du meinen Namen nicht in Anführungszeichen? Weil mein Name nach einem »bürgerlichen« Namen klingt, einem »gesetzlich erlaubten« (da gibt es meines Wissens tatsächlich Auflagen)? Wieso sollte anderen Namen weniger Akzeptanz entgegengebracht werden? Weiß ich, ob es ein maorischer/walisischer/kisuahelischer/aleutischer/... Name ist oder welche Gründe denjenigen dazu bewogen haben, den Namen zu benutzen...?
</metadiskussion>
Grüße,
Mathias
Hallo Mathias,
Diesbezüglich würde ich eher http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/ vorschlagen, daran wird dieses hoch- und herunterbewegen anschaulich erklärt.
Und ich habe gerade noch überlegt, mal einen Textbaustein zu basteln, für diese komischen Framesfragen. Hat sich nun erledigt, dank dieses Artikels. Ich sollte mich doch mal öfter durch die Tips & Tricks wühlen
(Aber wieso »DOM«-Hierarchie, mit dem DOM hat es doch meines Wissens wenig zu tun...? DOM an sich hat mit Fensterobjekten wenig zu tun, dachte ich... Bin mir selbst unsicher, lass das Thema einmal stehen. *duck*)
Document Object Model. Und window ist nunmal der Startpunkt, oder?
<metadiskussion>
Woher weißt du, dass ich »Mathias« heiße und warum schreibst du meinen Namen nicht in Anführungszeichen? Weil mein Name nach einem »bürgerlichen« Namen klingt, einem »gesetzlich erlaubten« (da gibt es meines Wissens tatsächlich Auflagen)? Wieso sollte anderen Namen weniger Akzeptanz entgegengebracht werden? Weiß ich, ob es ein maorischer/walisischer/kisuahelischer/aleutischer/... Name ist oder welche Gründe denjenigen dazu bewogen haben, den Namen zu benutzen...?
</metadiskussion>
Soviel Arroganz erlaube ich mir. Und meistens mache ich das auch nur bei besonders beknackten Nicknames. Aber ich bin durchaus bereit, diese Verhaltesweise im Einzelfall auf Bitten zu ändern. Sprich: Wenn Du willst und freundlich fragst, spreche ich Dich in Zukunft mit 'Weihnachtsmann' an. ;-)
Hallo,
Document Object Model. Und window ist nunmal der Startpunkt, oder?
Das DOM hat nichts mit Fenstern zu tun, dann hieße es wohl WOM, aber das ist ja nun wieder etwas ganz anderes ...
MfG, Thomas
Hallo Tim,
(Aber wieso »DOM«-Hierarchie, mit dem DOM hat es doch
meines Wissens wenig zu tun...? DOM an sich hat mit
Fensterobjekten wenig zu tun, dachte ich... Bin mir
selbst unsicher, lass das Thema einmal stehen. *duck*)Document Object Model. Und window ist nunmal der
Startpunkt, oder?
Das window das globale Objekt ist, hat aber, wie Thomas schon
sagte, nichts mit DOM zu tun. DOM beschreibt nur den Aufbau
des Seiten-Struktur-Baums (in Ermangelung eines besseren
Ausdrucks). Dass document ein Attribut von window (oder eher
von self) ist, liegt an der JS-Spezifikation. Dazu gibt es
aber in den naechsten Tagen einen FA von mir, der ist nur
gerade in der "Korrektur-Lese-Phase".
Gruesse,
CK
Hallo Christian,
Dazu gibt es aber in den naechsten Tagen einen FA von mir, der ist nur gerade in der "Korrektur-Lese-Phase".
Einen Was-Bitte? Jedenfalls bin ich gespannt darauf. Bisher dachte ich, das DOM und Javascript wären in gewissen Maßen äquivalent.
Hallo Tim,
Dazu gibt es aber in den naechsten Tagen einen FA von
mir, der ist nur gerade in der "Korrektur-Lese-Phase".Einen Was-Bitte?
Feature-Artikel.
Jedenfalls bin ich gespannt darauf. Bisher dachte ich, das
DOM und Javascript wären in gewissen Maßen äquivalent.
Ganz und gar nicht. Es gibt ja auch serverseitiges JS, und
da ist das Objekts-Modell *ganz* anders als im Browser.
JavaScript ist nicht auf Browser beschraenkt. Deshalb wird
DOM auch durch das W3C und JavaScript durch ECMA
standardtisiert (eigentlich nicht JavaScript, sondern
ECMA-Script, aber gut).
Gruesse,
CK
Hallo Tim,
Einen Was-Bitte? Jedenfalls bin ich gespannt darauf.
Hier isser schon:
http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/
:)
Gruesse,
CK
Hallo, Christian,
»Faszinierend«... ;) Ist spannend zu lesen. Ich muss gestehen, dass ich generell nur die Grundlagen objektorientierter Programmierung kenne, weshalb ich vieles nicht auf Anhieb verstanden habe, es klingt aber alles sehr logisch und im Grunde genommen vergleichsweise einfach in der Umsetzung.
Einige Anmerkungen:
<h2 class="Sh2"><a class="an" name="aboutvars">Variablen</a></h2>
^^^^^^^^^
Ist aber bei zwei Links (Inhaltsverzeichnis und »Erstelle ein Attribut im <a>[DOWN] aktuellen Variablen-Objekt</a> mit ...«) mit dem Anker »varobj« verlinkt.
Das Beispiel des eben genannten Absatzes enthält den Code:
var globvar = "val";
function func() {
alert("func called!");
}
function myclass() {
this.func = func;
}
alert("Variable globvar: " + self["globvar"]);
for(entry in self) {
alert(entry);
}
Hier soll doch nur veranschaulicht werden, dass globvar auch als Arrayeintrag erreichbar ist. Folglich ist in diesem Beispiel die Deklaration von »func« und »myclass« nicht entscheidend für das Beispiel, bzw. es ist nicht davon betroffen und macht nicht davon Gebrauch... man könnte die beiden Funktionen (Objekte ;)) deshalb herausnehmen, ich zumindest habe lange gerätselt, um deren Aufgabe in diesem speziellen Beispiel herauszufinden (mit dem Fazit, dass es nur von anderen Beispielen übernommen wurde, aber in diesem Beispiel nicht gebraucht wird).
Generell hätte ich mir entweder etwas zu der intendierten Ausgabe der Beispiele gewünscht (»Der erste Funktionsaufruf gibt undefined aus, weil ...« etc.) oder zumindest einen Hinweis, auf welchem Browser die Sachen lauffähig sind (Opera 6.05 kann einiges nicht).
Das zweite Beispiel unter »Implementation von Objekten« - wieso gibt das eigentlich zweimal undefined aus, ich hätte getippt, dass x("calling x") »calling x« ausgibt, der zweite alert... undefined, wie beobachtet, da das Attribut nicht über die Laufzeit der Funktion hinweg zugänglich ist, stimmt das?
Noch etwas:
| Wird eine Funktion ausgeführt, so wird für jeden formalen Parameter
| das Attribut im Funktions-Objekt auf den Wert des entsprechenden
| Parameters gesetzt.
Soweit klar - aber was bedeutet »formaler« Parameter, ich verstehe den Zusatz nicht: »in JavaScript müssen Parameter nicht zwingend formal deklariert werden«. Was bedeutet das? Kann eine Funktion mehrere Parameter entgegennehmen als in der Parameterliste angegeben, werden diese Attribute dann vielleicht mit numerischem Index vergeben....?
Wenn ich endlich meinen Popup-Artikel fertig habe, könnte ich mich einmal an ein rekursive Ausgabe aller Objekte im Hinblick auf die von dir diskutieren Besonderheiten machen, damit man die Objekthierarchie und Änderungen daran noch anschaulicher verdeutlichen kann, dazu muss ich mir den Artikel aber noch mehrmals durchlesen...
Grüße,
Mathias
Hallo molily,
<h2 class="Sh2"><a class="an" name="aboutvars">Variablen</a></h2>
^^^^^^^^^
Ist aber bei zwei Links (Inhaltsverzeichnis und »Erstelle
ein Attribut im <a>[DOWN] aktuellen Variablen-Objekt</a>
mit ...«) mit dem Anker »varobj« verlinkt.
Uuups. Danke. Noch ein Ueberbleibsel von vor der
Umstrukturierung.
Das Beispiel des eben genannten Absatzes enthält den Code:
var globvar = "val";
function func() {
alert("func called!");
}
function myclass() {
this.func = func;
}alert("Variable globvar: " + self["globvar"]);
for(entry in self) {
alert(entry);
}Hier soll doch nur veranschaulicht werden, dass globvar
auch als Arrayeintrag erreichbar ist.
Nicht nur globvar, sondern auch myclass und func.
Folglich ist in diesem Beispiel die Deklaration von
»func« und »myclass« nicht entscheidend für das Beispiel,
bzw. es ist nicht davon betroffen und macht nicht davon
Gebrauch...
Sie sollen verdeutlichen, dass Variablen und Funktionen als
Attribute in self gespeichert werden :)
Generell hätte ich mir entweder etwas zu der intendierten
Ausgabe der Beispiele gewünscht (»Der erste
Funktionsaufruf gibt undefined aus, weil ...« etc.)
Hm, habe ich das so nicht gemacht?
oder zumindest einen Hinweis, auf welchem Browser die
Sachen lauffähig sind (Opera 6.05 kann einiges nicht).
Hm, das ist schwierig... ich habe keinen Zugang zu einem IE.
Getestet sind die Beispiele im Mozilla und NN4, der NN4 kann
nur das getElementById im einen Beispiel nicht.
Das zweite Beispiel unter »Implementation von Objekten« -
wieso gibt das eigentlich zweimal undefined aus,
Tut es das? Welcher Browser? Dann hat der einen Bug... der
ECMA-Standard schreibt das genau so vor.
ich hätte
getippt, dass x("calling x") »calling x« ausgibt,
Korrekt.
der
zweite alert... undefined, wie beobachtet, da das Attribut
nicht über die Laufzeit der Funktion hinweg zugänglich
ist, stimmt das?
Korrekt.
Noch etwas:
| Wird eine Funktion ausgeführt, so wird für jeden
| formalen Parameter das Attribut im Funktions-Objekt auf
| den Wert des entsprechenden Parameters gesetzt.Soweit klar - aber was bedeutet »formaler« Parameter, ich
verstehe den Zusatz nicht: »in JavaScript müssen Parameter
nicht zwingend formal deklariert werden«. Was bedeutet das?
Das bedeutet, dass in JS nicht alle Parameter bekannt gegeben
werden muessen :)
Kann eine Funktion mehrere Parameter entgegennehmen als
in der Parameterliste angegeben, werden diese Attribute
dann vielleicht mit numerischem Index vergeben....?
Korrekt.
function blahr() {
alert(blahr.arguments.length);
}
blahr("a","b","c");
Gruesse,
CK
Hallo, Christian,
Das Beispiel des eben genannten Absatzes enthält den Code: (...)
(Für's Protokoll: http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/example9.html)
Hier soll doch nur veranschaulicht werden, dass globvar
auch als Arrayeintrag erreichbar ist.Nicht nur globvar, sondern auch myclass und func.
Ja, das ist mir klar, ich dachte nur, dass sich speziell *dieser* Teil des Artikels mit Variablen befasst, weshalb das Beispiel nicht unbedingt zusammenfassend auch die vorherigen Erkenntnisse mit einbeziehen muss...
Folglich ist in diesem Beispiel die Deklaration von
»func« und »myclass« nicht entscheidend für das Beispiel,
bzw. es ist nicht davon betroffen und macht nicht davon
Gebrauch...
Das speziell war ein Trugschluss meinerseits.
Sie sollen verdeutlichen, dass Variablen und Funktionen als
Attribute in self gespeichert werden :)
ACK.
Generell hätte ich mir entweder etwas zu der intendierten
Ausgabe der Beispiele gewünscht (»Der erste
Funktionsaufruf gibt undefined aus, weil ...« etc.)Hm, habe ich das so nicht gemacht?
Naja, implizit. ;) Ich fühlte mich auch deshalb verwirrt, weil die Ausgabe nicht mit den Beschreibungen übereinstimmte, was aber eher in die Kategorie unfähige Browser fälllt, wie gesagt, vielleicht könnte man das anmerken:
oder zumindest einen Hinweis, auf welchem Browser die
Sachen lauffähig sind (Opera 6.05 kann einiges nicht).Hm, das ist schwierig... ich habe keinen Zugang zu einem IE.
Getestet sind die Beispiele im Mozilla und NN4, der NN4 kann
nur das getElementById im einen Beispiel nicht.
Ich kann die Beispiele und generell die Anwendungsmöglichkeiten gerne auf Opera und MSIE testen, falls gewünscht...
Das zweite Beispiel unter »Implementation von Objekten« -
wieso gibt das eigentlich zweimal undefined aus,Tut es das? Welcher Browser? Dann hat der einen Bug... der
ECMA-Standard schreibt das genau so vor.
Also bei dem genannten Beispiel http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/example2.html gibt Mozilla 1.2.1 bei mir (Win98) zweimal undefined aus. K-Meleon 0.7 (Mozilla 1.2b) auch. Opera 6.05 und 7b1 auch. MSIE 6.0 (SP1) auch. *g* Es ist mir ein Rätsel...
In den geckoiden Browsern habe ich natürlich vorher alle JavaScript-betreffenden Sicherheitsoptionen herausgenommen, da meine Prefs dutzende Objekte sperren.
ich hätte getippt, dass x("calling x") »calling x« ausgibt,
Korrekt.
*fg* Leider finde ich keinen Browser, der dies richtig handhabt...
Kann eine Funktion mehrere Parameter entgegennehmen als
in der Parameterliste angegeben, werden diese Attribute
dann vielleicht mit numerischem Index vergeben....?Korrekt.
In dem Fall, das heißt für solche dummen Fragen, wäre sogar ein RTFM (http://selfhtml.teamone.de/javascript/objekte/function.htm#arguments) angemessen... ;)
Grüße,
Mathias
Hallo molily,
Nicht nur globvar, sondern auch myclass und func.
Ja, das ist mir klar, ich dachte nur, dass sich speziell
*dieser* Teil des Artikels mit Variablen befasst,
Nein, nur mit dem Variablen-Objekt (self, bzw. window) :)
Ich kann die Beispiele und generell die
Anwendungsmöglichkeiten gerne auf Opera und MSIE testen,
falls gewünscht...
Waere nett, ja.
Tut es das? Welcher Browser? Dann hat der einen Bug...
der ECMA-Standard schreibt das genau so vor.Also bei dem genannten Beispiel
http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/example2.html
gibt Mozilla 1.2.1 bei mir (Win98) zweimal undefined aus.
K-Meleon 0.7 (Mozilla 1.2b) auch. Opera 6.05 und 7b1 auch.
MSIE 6.0 (SP1) auch. *g* Es ist mir ein Rätsel...
Hm. Mein Mozilla 1.2b auf Arbeit auch. Hm... ok, Standard
nochmal nachgelesen: tatsaechlich ist es *geringfuegig*
anders: wenn func() aufgerufen wird (also als
Funktions-Aufruf), dann wird ein Funktions-Objekt erstellt.
*Diesem* Funktions-Objekt werden dann die formalen Parameter
als Attribute zugewiesen. Aber: das Funktions-Objekt ist
dem Programmierer nicht zugaenglich. Mozilla 1.2 verhaelt
sich also korrekt, Mozilla 1.0 nicht.
Gruesse,
CK
Der Artikel http://selfaktuell.teamone.de/tippstricks/javascript/fensterzugriff/
hat mir weitergeholfen. Hatte einfach ein zweites parent vergessen.
Ich hatte aber eh schon überlegt die Frames abzuschaffen (ausser den iframe) weil ich doch den Überblick verliere.
Aber jetzt gehts ja erst mal, danke Jungs :)
Hallo, vinter,
Habe ein kleines Problem mit meinem iframe.
Und zwar: meine Seite hat 3 Frames und einen iframe. Aus diesem iframe heraus will in nun zwei Frameseiten per Link ändern (die Navigation und das Hauptfenster, in dem auch der iframe liegt).
Ohne iframe habe ich das schon öfter gemacht aber mit iframe geht das nicht. Wie kann man das lösen?
Interoperabel lässt sich das nicht ohne Weiteres lösen. JavaScript-Lösungen sind dafür nur bedingt brauchbar, deshalb würde ich dir folgende Möglichkeiten vorschlagen:
1. Du änderst dein Seitenkonzept radikal, da drei Frames *plus* einen iframe eindeutig der Tod für jede Benutzbarkeit sind (*). Die konsequente Alternative wäre, ein zugängliches frameloses Layout zu erstellen, womit du das Problem der verschiedenen Inhalts- und Navigationsframes nicht mehr hast.
2. Drei Frames mögen einigermaßen benutzbar gestaltet werden können, aber wenn ein zusätzlicher iframe hinzukommt, werden alle Anstrengungen diesbezüglich fehlschlagen. Aus diesem Grund solltest du darüber nachdenken, zumindest den iframe wegzulassen, um anschließend mit jedem Link ein neues Frameset zu generieren (target="_top"), und zwar mittels eines serverseitigen Scripts, siehe http://aktuell.de.selfhtml.org/artikel/phpasp/php-frames/. Dadurch sparst du dir JavaScript-Lösungen und entgehst der Gefahr, dass die Seite ohne JavaScript unzugänglich wird (auch für Suchmaschinen etc.).
3. Du belässt deine Konstruktion mit drei Frames und dem Inner Frame und benutzt a) ein Skript, welches das Frameset mit verschiedenen Parametern generiert, siehe Link, und b) ein Skript für den Inhaltsframe, welches vom Frameset GET-Parameter entgegennimmt und damit gegebenenfalls den iframe füllt.
Wozu du solch abenteuerliche Framekonstruktionen überhaupt benötigst, ist mir rätselhaft... Zwei Frames sind meiner Meinung nach gerade noch tolerabel, bei drei Frames sollte zumindest ein Frame unrelevant sein. Immer wenn man dem Problem begegnet, mehrere Frames ändern zu wollen, sollte der Projektaufbau überprüft werden. Mit Frames ist es schlichtweg nicht möglich, eine komplexe Seite mit Sekundär- oder sogar Tertiärnavigationen zugänglich zu gestalten. Generell zu Problemen von Frames im Hinblick auf Kontext und nonlinearen Hypertext (ja, Tautologie): http://forum.de.selfhtml.org/archiv/2002/10/27752/#m150924 inklusive die verlinkten Beiträge. Dass du noframe-Elemente brav und ausgiebig benutzt, nehme ich hoffend an...
Grüße,
Mathias
P.S. (*) Ist es rhetorisch nicht ultra-raffiniert, wie ich Thesen sprachlich wie Argumente einbinde? ;)
Hallo Mathias,
P.S. (*) Ist es rhetorisch nicht ultra-raffiniert, wie ich Thesen sprachlich wie Argumente einbinde? ;)
Isses. Ich bin dagegen so früh an einem eiskalten Morgen noch nicht zu solch wunderbaren Evangelismus fähig. :-)
Hallo,
Habe ein kleines Problem mit meinem iframe.
Und zwar: meine Seite hat 3 Frames und einen iframe. Aus diesem iframe heraus will in nun zwei Frameseiten per Link ändern (die Navigation und das Hauptfenster, in dem auch der iframe liegt).
Ohne iframe habe ich das schon öfter gemacht aber mit iframe geht das nicht. Wie kann man das lösen?
top.frames["framename1"].location.href="neu1.htm";
top.frames["framename2"].location.href="neu2.htm";
Hier mal ein Beispiel, bei dem aus einem IFrame heraus der linke Frameinhalt ersetzt wird: http://www.styleassistant.de/test/frame_iframe.htm.
MfG, Thomas