JavaScript, DOM und zwei Fenster
Flexter
- javascript
0 nilsfad0 ritschmanhard0 Struppi
(Besser in Courier formatieren wg. fester Zeichenbreite)
Also,
folgende Problematik:
Ich habe eine Hauptseite mit frames, darunter einen Frame
(DynaFrame) mit einem JavaScript, welches Dynamischen Inhalt aufruft
und anzeigt. Innerhalb des Framesets geht das schon 1A... nur...
Wie schaffe ich es, aus einem Popupfenster, was aus dem speziellen
Frame geöffnet worden ist, auf die JavaScript.Funktionen von meinem
Frame zuzugreifen?
So sieht die Struktur aus (Sorry für die Turtlegrafik):
+--------------------------------+
| MeinScript.js: |
Hauptfenster: +--------------------------------+
+============+ | var Rota[1] = "test.htm]; |
|Titel | | function ChangeContent(IdxChg) |
+============+ | { |
| | | self.location=Rota[IdxChg]; |
|Body | +--------------->| } |
| | | | ...usw |
| | | +--------------------------------+
+============+ | A
|DynaFrame |<--+ |
| X |-------------> X öffnet ein Popupfenster |
+============+ |
| |
| |
| soll darauf zugreifen
| |
v |
Popupfenster: |
+============+ |
| | |
| | |
| | |
| Link |<-------- Link soll Funktion ChangeContent(WhichCont)
| | im Hauptfenster.DynaFrame ausführen, welche
+============+ sich in MeinScript.js im DynaFrame befindet
(über <script src="MeinScript.js> )
Es soll also eine Interaktion zwischen zwei Fenstern (sog. Remote
Control Funktion) stattfinden, wobei die Besonderheit darin liegt,
daß das Hauptfenster auch noch in Frames unterteilt ist und genau
auf die Funktion in einem dieser Frames zugegriffen werden soll.
Ich habe mir zwar die JavaScriptreferenzen hier auf SelfHTML
durchgelesen, blicke da aber nicht so ganz durch und Versuche mit
<a onclick="top.DynaFrame.ChangeContent(1)">Link</a> oder
<a onclick="parent.DynaFrame.ChangeContent(1)">Link</a> oder
<a onclick="window.DynaFrame.ChangeContent(1)">Link</a> oder
<a onclick="document.DynaFrame.ChangeContent(1)">Link</a>
brachten alle den Fehler '...ist Null oder kein Objekt'
Frage 1: Ist sowas überhaupt machbar (Wegen Sicherheitsrichtlinien etc.)?
Frage 2: Wenn ja, wie muß die DOM-Referenzierung aussehen, um auf
die Funktion entsprechend zuzugreifen?
Für Hilfe wäre ich sehr dankbar, denn ich verzweifel schon langsam...
Gruß,
Flexter
Eine sehr ausführliche und anschauliche "Problembeschreibung", da blickt man schnell durch.
Ich habe zwar nicht die gewünschte Lösung, aber warum bindest du die "MeinScript.js" nicht einfach nochmal im HTML des Popupfensters ein und passt die dortigen Funktionen dahingehend an, dass sie den Richtigen Frame adressieren?
Hallo Flexter!
Frage 1: Ist sowas überhaupt machbar (Wegen Sicherheitsrichtlinien etc.)?
Antwort: Kommt darauf an: wenn dein DynaFrame und Popup mit Daten aus der selben Domain geladen werden, dann ja, sonst nein.
Frage 2: Wenn ja, wie muß die DOM-Referenzierung aussehen, um auf
die Funktion entsprechend zuzugreifen?
opener.funktionsaufruf(parameter);
Greets,
Richard
folgende Problematik:
Ich habe eine Hauptseite mit frames, darunter einen Frame
(DynaFrame) mit einem JavaScript, welches Dynamischen Inhalt aufruft
und anzeigt. Innerhalb des Framesets geht das schon 1A... nur...Wie schaffe ich es, aus einem Popupfenster, was aus dem speziellen
Frame geöffnet worden ist, auf die JavaScript.Funktionen von meinem
Frame zuzugreifen?
Den Zugriff auf die Framestrukturen den hast du ja schon.
Der Zugriff vom Popup auf das Hauptfenster geht über opener
ABER!!!
Wenn im Popup ein Frameset steckt und du innerhalb der Frames auf opener zugreifen musst, dann über top.opener
Wenn jetzt, wie in deinem Beispiel opener ein frameset ist, dann iste es möglich über opener.parent.anderesFrame zu zugreifen
Fragestellung:
Frage 1: Ist sowas überhaupt machbar (Wegen Sicherheitsrichtlinien etc.)?
Ja, wenn alle Seiten auf der Gleichen Domain (nicht Server!) liegen
Struppi.
folgende Problematik:
Ich habe eine Hauptseite mit frames, darunter einen Frame
(DynaFrame) mit einem JavaScript, welches Dynamischen Inhalt aufruft
und anzeigt. Innerhalb des Framesets geht das schon 1A... nur...Wie schaffe ich es, aus einem Popupfenster, was aus dem speziellen
Frame geöffnet worden ist, auf die JavaScript.Funktionen von meinem
Frame zuzugreifen?Den Zugriff auf die Framestrukturen den hast du ja schon.
Der Zugriff vom Popup auf das Hauptfenster geht über opener
ABER!!!Wenn im Popup ein Frameset steckt und du innerhalb der Frames auf opener zugreifen musst, dann über top.opener
Wenn jetzt, wie in deinem Beispiel opener ein frameset ist, dann iste es möglich über opener.parent.anderesFrame zu zugreifen
Fragestellung:
Frage 1: Ist sowas überhaupt machbar (Wegen Sicherheitsrichtlinien etc.)?
Ja, wenn alle Seiten auf der Gleichen Domain (nicht Server!) liegen
Struppi.
Also wenn ich das jetzt richtig verstanden habe, meinst Du mit opener den Framesetnamen, indem sich die eigentliche HTML mit dem JavaScript befindet (hier DynaFrame), oder ist opener eine fest vergebene JavaScript-Referenzierung, die sich auf das Popup bezieht, welches über den Link geöffnet wird?
Ich muß fairerweise dazu sagen, daß das popup über ein stinknormalen Link mit target="_blank"-Ziel geöffnet wird, d,h. nicht über eine JavaScriptfunktion. Ist mir aber auch erst jetzt aufgefallen, daß ich das nicht miterwähnt habe.
Und ja, die Seiten liegen alle auf der gleichen Domain (sogar im selben Verzeichnis), somit kann dies als Fehlerquelle ausgeschlossen werden.
Problem gelöst!!!!
Danke Struppi für den Hint mit dem opener-Objekt.
Den Link für den Popup auf JavaScript-Ebene gescriptet und aus dem Popup mit opener.ChangeContent(1) auf das Hauptfenster zugegriffen.
Das hat sogar die explizite Referenzierung auf den Frame erspart, weil das wohl die window.open-Funktion dem Script mit auf den Weg gibt. Feine Sache, das!
Funzt 1A in MSIE und Firefox (1.5.0.6)
Gruß an alle, die geholfen haben!
TOPIC CLOSED!