Ist opener 2x möglich?
Ralf
- javascript
0 Cheatah0 Christoph Schnauß0 Ralf0 Frodo0 Struppi
Hallo!
Ich kann in einem Popup mit opener auf das Hauptfenster zugreifen.
Wenn nun das Hauptfenster selbst ein Popup ist - wie komme ich von dem letzten Popup an das Fenster, welches "unter" dem öffnenden Fenster des Popups liegt.
Hmm - vielleicht etwas schwer zu verstehen?
Also:
Fenster1 macht window.open("Fenster2")
Fenster2 macht window.open("Fenster3")
Kann ich nun in dem Code von Fenster3 auf den Inhalt von Fenster1 zugreifen?
opener.opener geht anscheinend nicht.
Wie geht es - wenn überhaupt?
Ralf
Hi,
opener.opener geht anscheinend nicht.
was erweckt diesen Anschein?
Cheatah
opener.opener geht anscheinend nicht.
was erweckt diesen Anschein?
(typeof opener.opener.document) ist "undefined" bei Ausführung in Fenster3
Ralf
Hallo Cheatah,
könntest du vielleicht an folgender Stelle nochmals einsetzen?
https://forum.selfhtml.org/?t=122894&m=790869
Ich habe inzwischen ein funktionierendes Beispiel zur Verfügung gestellt und verstehe nicht, warum es in einer anderen Umgebung nicht funktioniert.
Ralf
hallo Ralf,
Ich kann in einem Popup mit opener auf das Hauptfenster zugreifen.
Und wie machst du das?
Wenn nun das Hauptfenster selbst ein Popup ist
Dann hast du irtgendwas falsch gemacht.
wie komme ich von dem letzten Popup an das Fenster, welches "unter" dem öffnenden Fenster des Popups liegt.
Von der Hauptseite aus.
opener.opener geht anscheinend nicht.
Was verführt dich zu dieser Aussage - und was sagt beispielsweise die Javascriptkonsole des Firefox dazu?
Wie geht es - wenn überhaupt?
Vermutlich anders, als du zu denken scheinst.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Und wie machst du das?
opener.document.getElement....
Wenn nun das Hauptfenster selbst ein Popup ist
Dann hast du irtgendwas falsch gemacht.
Nein.
wie komme ich von dem letzten Popup an das Fenster, welches "unter" dem öffnenden Fenster des Popups liegt.
Von der Hauptseite aus.
Nein - darauf habe ich keine Einfluss.
opener.opener geht anscheinend nicht.
Was verführt dich zu dieser Aussage - und was sagt beispielsweise die Javascriptkonsole des Firefox dazu?
opener.document aus dem "obersten" Fenster ergibt ein object.
opener.opener.document ergibt dagegen "undefined" - jedoch opener.opener wiederum ergibt "object".
Wie geht es - wenn überhaupt?
Vermutlich anders, als du zu denken scheinst.
Dehalb frage ich ja hier.
Ralf
hallo Ralf,
Wenn nun das Hauptfenster selbst ein Popup ist
Dann hast du irgendwas falsch gemacht.
Nein.
Doch ;-)
Im übrigen kommen wir vermutlich nicht wesentlich weiter, wenn wir jetzt nur verbal etwas debattieren, wofür bisher nur dir der Script-Code genau bekannt ist. Daher die übliche Bitte: stell das, was du diskutieren möchtest, bitte online auf irgendeiner (temporären) Adresse in deinem Webspace zum Anschauen zur Verfügung und gib den link hier an. Dann besteht die Möglichkeit, tatsächlich exakt am Beispiel erstmal nachzuschauen, und man braucht dir nicht irgendwelche theoretischen Richtigkeiten vor den Latz zu knallen.
wie komme ich von dem letzten Popup an das Fenster, welches "unter" dem öffnenden Fenster des Popups liegt.
Von der Hauptseite aus.
Nein - darauf habe ich keine Einfluss.
Ups. Siehst du: genau sowas muß man am konkreten Beispiel(-code) untersuchen. Natürlich hast du Einfluß auf die "Hauptseite" - wenn aber wirklich nicht, solltest du alle Zappeleien unterlassen.
Wie geht es - wenn überhaupt?
Vermutlich anders, als du zu denken scheinst.
Dehalb frage ich ja hier.
Was durchaus die richtige Entscheidung ist. Nur mußt du dabei auch inkauf nehmen, daß "wir" eventuell etwas antworten, was dir nicht gefällt.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
schau mal bitte in mein Posting von 01:43 weiter oben. Dort habe ich das prinzipielle Vorgehen erläutert und wohl auch bereits den Fehler erkannt. Es mangelt am Zugriff.
Eine Darstellung des Codes würde nicht viel bringen, weil ich nur den Teil, den ich aus Fenster2 "implantiere", darstellen könnte.
Ups. Siehst du: genau sowas muß man am konkreten Beispiel(-code) untersuchen. Natürlich hast du Einfluß auf die "Hauptseite" - wenn aber wirklich nicht, solltest du alle Zappeleien unterlassen.
Das war es dann wohl. Ich war dem Irrtum aufgesessen, dass ich durch den von mir implantierten Code in Fenster2, der seinerseits Fenster3 öffnet und füllt sowie dem daraus resultierenden Rückgriff von Fenster3 auf Fenster2 auch auf Fenster1 zugreifen könnte.
Was durchaus die richtige Entscheidung ist. Nur mußt du dabei auch inkauf nehmen, daß "wir" eventuell etwas antworten, was dir nicht gefällt.
Das ist auch kein Problem für mich. Ich lerne noch. Und dabei mache ich Fehler, aus denen ich wiederum lerne.
Vielen Dank an alle Beteiligten,
Ralf
Hallo Christoph,
könntest du vielleicht an folgender Stelle nochmals einsetzen?
https://forum.selfhtml.org/?t=122894&m=790869
Ich habe inzwischen ein funktionierendes Beispiel zur Verfügung gestellt und verstehe nicht, warum es in einer anderen Umgebung nicht funktioniert.
Ralf
Fenster1 macht window.open("Fenster2")
Fenster2 macht window.open("Fenster3")
Ich könnte vielleicht aus Fenster3 eine Javascript-Funktion in Fenster2 implantieren, die dann ihrerseits per opener.document auf Fenster1 zugreift und die gewünschten Informationen zurückgibt.
Aber ich hatte gehofft, das ein direkter "Durchgriff" möglich ist.
Ralf
Hi,
Aber ich hatte gehofft, das ein direkter "Durchgriff" möglich ist.
ich gebe ja zu, dass man sich an den Ton hier im Forum vielleicht etwas gewöhnen muss, vor allem wenn du auf zwei vom Kaliber Cheatah oder Christoph Schnauß stößt, aber alles was dir die beiden sagen wollten ist: Das geht, und zwar eigentlich so wie du es vorgenommen hast, mittels opener.opener. Warum das bei der nicht klappt, ist so ohne weiteres nicht ersichtlich, entweder hast du ein Same-Origin-Policy-Problem oder was anderes läuft schief, aber im Grundsatz ist der Zugriff möglich.
MfG
Rouven
Das geht, und zwar eigentlich so wie du es vorgenommen hast, mittels opener.opener.
Ich verstehe ja auch nicht, warum opener.opener ein object ist und opener.opener.document undefined ist. opener.document geht doch auch!
Warum das bei der nicht klappt, ist so ohne weiteres nicht ersichtlich, entweder hast du ein Same-Origin-Policy-Problem oder was anderes läuft schief, aber im Grundsatz ist der Zugriff möglich.
Mit Same-Origin sollte das nichts zu tun haben, wenn auch der Code zum Öffnen von Fenster3 per SCRIPT von einer anderen Domain stammt.
Da ja opener.opener offensichtlich ein gültiges object darstellt - was sollte ich danach zwecks Test anhängen? opener.opener.document geht jedenfalls nicht - da undefined.
Irgendwie rätselhaft ...
Ralf
Hallo nochmal,
Mit Same-Origin sollte das nichts zu tun haben, wenn auch der Code zum Öffnen von Fenster3 per SCRIPT von einer anderen Domain stammt.
Also was stammt denn da von wo? Je nachdem könnte dich das in der Tat ziemlich einschränken, frei nach dem Motto "ja, ist ein Objekt, aber nein, ich lass dich an keine Details dran".
Hast du mal die Firefox-JS-Konsole bemüht, die dürfte da gesprächiger sein als der Internet-Explorer, vielleicht haut der FF eine Warnung o.ä. raus...
MfG
Rouven
Mit Same-Origin sollte das nichts zu tun haben, wenn auch der Code zum Öffnen von Fenster3 per SCRIPT von einer anderen Domain stammt.
Hat wohl doch etwas damit zu tun. Denn von Fenster2 aus bekomme ich mit dem nachgeladenen Code eine Zugriffsverletzung auf Fenster1.
opener.document existiert, aber ich komme nicht ran. Also auch keine Chance von Fenster3.
Aber so ganz kapiere ich das nicht und will daher mal hier die Hierarchie darstellen:
Fenster1 liegt in Domain abc.de und öffnet Fenster2 per window.open().
Fenster2 enthält ein SCRIPT Tag mit Code aus Domain xyz.de
Der geladene Code wird problemlos ausgeführt und öffnet ein leeres Fenster3 und implantiert dort Code.
Mittels dieses Codes ist dann aus Fenster3 ein Zugriff auf Fenster2 möglich.
Wie lässt sich das erklären und ist das ein Same-Origin-Problem?
Ich bitte um eine Erläuterung, die auch mir zugänglich ist, der sich mit der Problematik noch nicht soo tief befasst hat.
Ralf
N'Abend,
jup, da hast du genau dein Problem erkannt.
Die deutsche Wikipedia scheint leider nicht viel dazu herzugeben, aber in der englischen ist auch ein Beispiel verzeichnet.
Grob gesagt: Du darfst nur auf solche Fenster (mit frame=fenster) zugreifen, die von der selben Domain stammen wie du selbst.
Damit darf also weder dein Ausgangsfenster auf das document des ersten Popups zugreifen (obwohl es für die Öffnung zuständig ist), noch anders herum.
Dein Fenster3 wurde von der Domain aus Fenster2 geöffnet und von da gefüllt, demnach sind beide selben Ursprungs und dürfen Informationen austauschen. Wenn du in Fenster3 wiederum Code von der Domäne aus Fenster1 nachgeladen hättest, müsste es zu der trickreichen Konstellation kommen, dass du zwar nicht auf die Inhalte deines openers zugreifen darfst, wohl aber auf dessen opener. Letzteres unterschreibe ich allerdings nicht, weil es sein könnte, dass auch das Auslesen des opener.opener blockiert würde...
MfG
Rouven
Moin Rouven,
jup, da hast du genau dein Problem erkannt.
Aber so ganz ist es mir noch nicht klar, wenn ich die gegebenen Umstände betrachte (s.u.)
Grob gesagt: Du darfst nur auf solche Fenster (mit frame=fenster) zugreifen, die von der selben Domain stammen wie du selbst.
Mir ist die Same-Origin-Policy durchaus klar - ich verstehe nur nicht, warum das eine geht und das andere nicht.
Damit darf also weder dein Ausgangsfenster auf das document des ersten Popups zugreifen (obwohl es für die Öffnung zuständig ist), noch anders herum.
Dein Fenster3 wurde von der Domain aus Fenster2 geöffnet und von da gefüllt, demnach sind beide selben Ursprungs und dürfen Informationen austauschen. Wenn du in Fenster3 wiederum Code von der Domäne aus Fenster1 nachgeladen hättest, müsste es zu der trickreichen Konstellation kommen, dass du zwar nicht auf die Inhalte deines openers zugreifen darfst, wohl aber auf dessen opener. Letzteres unterschreibe ich allerdings nicht, weil es sein könnte, dass auch das Auslesen des opener.opener blockiert würde...
Dann muss ich wohl doch mal ein wenig weiter ausholen, denn verstehen möchte ich es schon - auch wenn es keine Lösung gibt.
Fenster1 (auf welches ich absolut keinen Einfluss habe!):
Domain: abc.de
Führt aus: window.open(Fenster2)
Fenster2 (dort kann ich Code einsetzen):
Domain: abc.de
Von mir eingesetzt: SCRIPT type=text/javascript src=http://xyz.de
Führt aus: window.open(Fenster3) und Fenster3.write(code)
Fenster3 (vollständig von mir kontrollierbar):
Domain: sollte m.E. abc.de sein
Ich kann nun aus Fenster3 per opener mit Fenster2 machen, was mir beliebt. Daher gehe ich davon aus, dass die SOP nicht verletzt wird.
Ich kann aber weder aus Fenster2 (per opener) noch aus Fenster3 (per opener.opener) auf Fenster1 zugreifen und bekomme eine Zugriffsverletzung (lt. IE).
Warum geht es von Fenster3 auf Fenster2, aber nicht von 2 auf 1 oder von 3 auf 1?
Ralf
Mir ist die Same-Origin-Policy durchaus klar - ich verstehe nur nicht, warum das eine geht und das andere nicht.
Naja, so ganz klar ist dir sie doch nicht.
Dann muss ich wohl doch mal ein wenig weiter ausholen, denn verstehen möchte ich es schon - auch wenn es keine Lösung gibt.
Fenster1 (auf welches ich absolut keinen Einfluss habe!):
Domain: abc.de
Führt aus: window.open(Fenster2)Fenster2 (dort kann ich Code einsetzen):
Domain: abc.de
Von mir eingesetzt: SCRIPT type=text/javascript src=http://xyz.de
Führt aus: window.open(Fenster3) und Fenster3.write(code)
und Fenster3 ist folglich von der Domain xyz.de geöffnet worden und hat keinen Zugriff auf abc.de
Fenster3 (vollständig von mir kontrollierbar):
Domain: sollte m.E. abc.de sein
Nein.
Warum geht es von Fenster3 auf Fenster2, aber nicht von 2 auf 1 oder von 3 auf 1?
Fenster öffnen kannst du soviele du lustig bist (so es der Popupblocker zuläßt) von so vielen Domains wie du möchtest, nur hast du dann weder Zugriff auf den Inhalt der seite noch die Seite auf den Inhalt von opener.
Also schlägt der Zugriff auf .document in beiden Fällen fehl.
Struppi.
Fenster1 (auf welches ich absolut keinen Einfluss habe!):
Domain: abc.de
Führt aus: window.open(Fenster2)Fenster2 (dort kann ich Code einsetzen):
Domain: abc.de
Von mir eingesetzt: SCRIPT type=text/javascript src=http://xyz.de
Führt aus: window.open(Fenster3) und Fenster3.write(code)und Fenster3 ist folglich von der Domain xyz.de geöffnet worden und hat keinen Zugriff auf abc.de
Bist du dir da absolut sicher? Ich habe FUNKTIONIERENDEN Code, der in exakt der von mir beschriebenen Weise von Fenster3 auf Fenster2 zugreift!
Fenster3 (vollständig von mir kontrollierbar):
Domain: sollte m.E. abc.de seinNein.
Warum kann ich dann von Fenster3 aus auf das mit Sicherheit zu Domain abc.de gehörende Fenster zugreifen?
Warum geht es von Fenster3 auf Fenster2, aber nicht von 2 auf 1 oder von 3 auf 1?
Fenster öffnen kannst du soviele du lustig bist (so es der Popupblocker zuläßt) von so vielen Domains wie du möchtest, nur hast du dann weder Zugriff auf den Inhalt der seite noch die Seite auf den Inhalt von opener.
Also schlägt der Zugriff auf .document in beiden Fällen fehl.
Eben NICHT! Und genau das verstehe ich nicht.
Wenn es in der von mir beschriebenen Konstellation von Fenster3 auf Fenster2 geht, müsste Fenster3 zur Domain abc.de gehören - oder?
Ich bitte auch zu beachten, WIE Fenster3 geöffnet wird: window.open('','Fenster3').
Es wird also KEINE Adresse mitgegeben - ein leeres Fenster wird geöffnet. Das Fenster wird erst mit Code gefüllt!
Der Code, der Fenster3 öffnet und füllt, wird per o.a. SCRIPT Tag aufgerufen. Das Script stammt aus Domain xyz.de.
Es funktioniert übrigens im IE, im FF und in Opera.
Ralf
Fenster1 (auf welches ich absolut keinen Einfluss habe!):
Domain: abc.de
Führt aus: window.open(Fenster2)Fenster2 (dort kann ich Code einsetzen):
Domain: abc.de
Von mir eingesetzt: SCRIPT type=text/javascript src=http://xyz.de
Führt aus: window.open(Fenster3) und Fenster3.write(code)und Fenster3 ist folglich von der Domain xyz.de geöffnet worden und hat keinen Zugriff auf abc.de
Bist du dir da absolut sicher? Ich habe FUNKTIONIERENDEN Code, der in exakt der von mir beschriebenen Weise von Fenster3 auf Fenster2 zugreift!
Das kann nicht sein, das Skript und das ist das einzige was zählt, ist lt. deiner Aussage von xyz.de und das darf nicht auf abc.de zugreifen, auch wenn abc.de das Skript einbindet.
Fenster3 (vollständig von mir kontrollierbar):
Domain: sollte m.E. abc.de seinNein.
Warum kann ich dann von Fenster3 aus auf das mit Sicherheit zu Domain abc.de gehörende Fenster zugreifen?
Das Fenster ja, aber nicht das Skript!
Ich bitte auch zu beachten, WIE Fenster3 geöffnet wird: window.open('','Fenster3').
Es wird also KEINE Adresse mitgegeben - ein leeres Fenster wird geöffnet. Das Fenster wird erst mit Code gefüllt!Der Code, der Fenster3 öffnet und füllt, wird per o.a. SCRIPT Tag aufgerufen. Das Script stammt aus Domain xyz.de.
Es funktioniert übrigens im IE, im FF und in Opera.
Nicht der Zugriff von xyz.de auf die Seite die von abc.de erzeugt wird. Wenn das stimmt was du sagst dann du hast eine Sicherheitslücke entdeckt.
und wie an anderer Stelle erwähnt, es bringt nichts irgendwas was nicht sein kann, dauernd zu behaupten. Zeig es!
Struppi.
Fenster1 (auf welches ich absolut keinen Einfluss habe!):
Domain: abc.de
Führt aus: window.open(Fenster2)Fenster2 (dort kann ich Code einsetzen):
Domain: abc.de
Von mir eingesetzt: SCRIPT type=text/javascript src=http://xyz.de
Führt aus: window.open(Fenster3) und Fenster3.write(code)und Fenster3 ist folglich von der Domain xyz.de geöffnet worden und hat keinen Zugriff auf abc.de
Bist du dir da absolut sicher? Ich habe FUNKTIONIERENDEN Code, der in exakt der von mir beschriebenen Weise von Fenster3 auf Fenster2 zugreift!
Das kann nicht sein, das Skript und das ist das einzige was zählt, ist lt. deiner Aussage von xyz.de und das darf nicht auf abc.de zugreifen, auch wenn abc.de das Skript einbindet.
Es ist aber so!
Fenster3 (vollständig von mir kontrollierbar):
Domain: sollte m.E. abc.de seinNein.
Warum kann ich dann von Fenster3 aus auf das mit Sicherheit zu Domain abc.de gehörende Fenster zugreifen?
Das Fenster ja, aber nicht das Skript!
Was meinst du damit? In Fenster3 läuft Code, der auf den INHALT von Fenster2 in jeder x-beliebigen Weise zugreifen kann.
Ich bitte auch zu beachten, WIE Fenster3 geöffnet wird: window.open('','Fenster3').
Es wird also KEINE Adresse mitgegeben - ein leeres Fenster wird geöffnet. Das Fenster wird erst mit Code gefüllt!Der Code, der Fenster3 öffnet und füllt, wird per o.a. SCRIPT Tag aufgerufen. Das Script stammt aus Domain xyz.de.
Es funktioniert übrigens im IE, im FF und in Opera.
Nicht der Zugriff von xyz.de auf die Seite die von abc.de erzeugt wird. Wenn das stimmt was du sagst dann du hast eine Sicherheitslücke entdeckt.
Ich bin dafür berüchtigt (jedoch in einer ganz anderen Umgebung), Fehler in Software zu entdecken, die seit Jahren bei anderen stabil und problemlos läuft.
und wie an anderer Stelle erwähnt, es bringt nichts irgendwas was nicht sein kann, dauernd zu behaupten. Zeig es!
Das wird ein wenig dauern, aber ich werde versuchen, den Code so zu adaptieren, dass er die von mir aufgezeigte Verhaltensweise in einer unabhängigen Umgebung hat.
Das Ergebnis werde ich dann hier (mit korrektem Link!) posten.
Ralf
Hallo Struppi,
es ging doch etwas schneller als gedacht, aber nicht ganz mit dem erwarteten Ergebnis. D.h. mit meiner nachgebildeten Konstruktion habe ich nun durchaus von Fenster3 Zugriff auf Fenster1 (wie natürlich auch von Fenster3 auf Fenster2):
http://stork.gmxhome.de/selfhtml/Fenster1.htm
In dem Beispiel ist es nun also durchgängig. Stellt es denn eine Verletzung der Same-Origin-Policy dar? Und wenn - ist es eine Sicherheitslücke?
Warum es in meinem "realen" Code nicht funktioniert, muss ich nun herausfinden. Dort ist die gesamte Konstruktion noch sehr viel umfangreicher. Ich werde mal versuchen, mein Beispiel dort zu implantieren und von dem Punkt mich dann wieder an meinen "realen" Code herantasten.
Könnte es evtl. daran liegen, dass Fenster2 NICHT per window.open() aufgerufen wird? Wie kann ich das feststellen? Immerhin lässt sich der Aufruf mit einem Popup-Blocker unterdrücken, was m.E. für window.open() spricht.
Ralf
es ging doch etwas schneller als gedacht, aber nicht ganz mit dem erwarteten Ergebnis. D.h. mit meiner nachgebildeten Konstruktion habe ich nun durchaus von Fenster3 Zugriff auf Fenster1 (wie natürlich auch von Fenster3 auf Fenster2):
http://stork.gmxhome.de/selfhtml/Fenster1.htm
Guck ich mir später an.
Ich hatte auch mal an dem ganzen gebastelt und hier auf dem alten Rechner ist der IE (4) dann abgestürzt.
Aber soweit ich das schon gesehen hatte, hast du recht - nicht ich.
In dem Beispiel ist es nun also durchgängig. Stellt es denn eine Verletzung der Same-Origin-Policy dar? Und wenn - ist es eine Sicherheitslücke?
Hmm, dafür bin ich nicht schlau genug. Ich denke aber nicht, du bindest ja freiwillig den Code einer fremden Seite ein, dieser ist dann auch auf deiner Domain.
Ich meine mich daran zu erinnern das dies ausgenutzt wurde, um Besucherverhalten auszuspionieren. Da du mit einem Skript (z.b. für Werbung) von einer Domain, das auf verschiedenen Domains eingebunden wird einen User quasi verfolgen könntest. Insofern macht es Sinn dass es so ist, wie du es sagst, da das Skript dann nur noch auf Cookies der Domain, die es einbindet zugreifen kann und nicht von der von der das Skript ist.
Klingt kompliziert, angenommen du besuchst abc.de und danch def.de die jeweils ein Skript von xyz.de einbinden
www.abc.de xyz.de
(bindet ein) <---- script.js (setzt cookie SID=1)
[cookie: SID=1] und nicht hier [cookie SID=1]
www.def.de
(bindet ein) <---- script.js
Das Skript kann dann nicht das Cookie von abc.de lesen. Würde das Cookie von der Domain xyz.de kommen, schon und xyz.de hätte die Möglichkeit deinen Weg zu verfolgen.
Könnte es evtl. daran liegen, dass Fenster2 NICHT per window.open() aufgerufen wird? Wie kann ich das feststellen? Immerhin lässt sich der Aufruf mit einem Popup-Blocker unterdrücken, was m.E. für window.open() spricht.
Muss ich auch nochmal drüber nachdenken ;-)
Struppi.
es ging doch etwas schneller als gedacht, aber nicht ganz mit dem erwarteten Ergebnis. D.h. mit meiner nachgebildeten Konstruktion habe ich nun durchaus von Fenster3 Zugriff auf Fenster1 (wie natürlich auch von Fenster3 auf Fenster2):
http://stork.gmxhome.de/selfhtml/Fenster1.htmGuck ich mir später an.
Ich hatte auch mal an dem ganzen gebastelt und hier auf dem alten Rechner ist der IE (4) dann abgestürzt.Aber soweit ich das schon gesehen hatte, hast du recht - nicht ich.
Darum geht es mir nicht.
In dem Beispiel ist es nun also durchgängig. Stellt es denn eine Verletzung der Same-Origin-Policy dar? Und wenn - ist es eine Sicherheitslücke?
Hmm, dafür bin ich nicht schlau genug. Ich denke aber nicht, du bindest ja freiwillig den Code einer fremden Seite ein, dieser ist dann auch auf deiner Domain.
Davon war ich auch ausgegangen und war über das unterschiedliche Verhalten von opener und opener.opener erstaunt.
Könnte es evtl. daran liegen, dass Fenster2 NICHT per window.open() aufgerufen wird? Wie kann ich das feststellen? Immerhin lässt sich der Aufruf mit einem Popup-Blocker unterdrücken, was m.E. für window.open() spricht.
Muss ich auch nochmal drüber nachdenken ;-)
Ich bin jetzt mal im FF mit dem DOM-Inspektor durch das Ursprungsdokument gegangen (in meiner Namensgebung: Fenster1). Dort ist ein Button, der mit onClick=window.open() belegt ist (und damit das Fenster öffnet, worin mein Code implantiert ist: Fenster2).
Dann habe ich mein Beispielscript "Fenster2.js" unverändert(!) in "Fenster2" eingesetzt und habe wieder das rätselhafte Ergebnis:
Zugriff aus "meinem" Fenster3 auf Fenster2 funktioniert und typeof opener.opener ist object - also vorhanden.
Wenn ich jedoch versuche, auf den Inhalt von opener.opener zuzugreifen, bekomme ich im FF folgende Fehlermeldung:
Fehler: uncaught exception: Die Erlaubnis für den Aufruf der Methode HTMLDocument.getElementsByTagName wurde verweigert
Also muss in der "realen" Umgebung irgend etwas anders sein, als in meinem Testbeispiel. Am eingefügten Javascript Code kann es m.E. nicht liegen, da dieser identisch ist und auch exakt in gleicher Weise aufgerufen wird.
Vielleicht kann ja einer der "Gurus" was dazu beitragen?
Ralf
Hallo,
Also muss in der "realen" Umgebung irgend etwas anders sein, als in meinem Testbeispiel.
Ist das Dokument in Fenster1 eventuell ein Frameset und stellt in einem Frame ein Dokument aus einer ganz anderen dritten domain dar? Dieses Frame, und nicht das eigentliche Fenster1, wäre dann der opener.opener für Fenster3 und dessen Dokument wäre dann in einer dritten, nicht zugänglichen domain.
viele Grüße
Axel
Hallo Axel,
Ist das Dokument in Fenster1 eventuell ein Frameset und stellt in einem Frame ein Dokument aus einer ganz anderen dritten domain dar? Dieses Frame, und nicht das eigentliche Fenster1, wäre dann der opener.opener für Fenster3 und dessen Dokument wäre dann in einer dritten, nicht zugänglichen domain.
Ich habe mal das Fenster im DOM-Inspektor weiter untersucht und es ist definit kein Frameset. Es wird jedoch geprüft, ob es in einem Frame aufgerufen wurde:
window.name = "xxx"; <== sollte ich diesen Namen prüfen?
if(parent.frames[0])
{
parent.location.href = self.location.href;
}
Vielleicht sollte ich noch erwähnen, dass die Seiten Fenster1 und Fenster2 per PHP erzeugt werden. Sie stammen aber definitiv vom gleichen Server.
Ralf
Das Rätsel ist gelöst!
Ich habe noch eine zweite reale "Umgebung", wo meine Anwendung läuft. Und dort funktioniert es ohne Probleme. Also habe ich versucht, die Unterschiede herauszufinden und bin darauf gestoßen, dass in der ersten Umgebung die Adresse von Fenster2 absolut und nicht relativ angegeben ist.
Es gibt mehrere Server, auf denen die Anwendung läuft (www, www2, www3) - das Fenster wird jedoch IMMER mit www. aufgerufen.
Wenn die Anwendung ebenfalls auf www. läuft, funktioniert es auch mit dem Zugriff von Fenster3 auf Fenster1 - andernfalls eben nach der Same-Origin-Policy nicht.
Zum Glück brauche ich nur in der zweiten Umgebung den Zugriff auf das Ursprungsfenster und kann mich nun an die Realisierung machen.
Vielen Dank an alle, die sich beteiligt und mir weitere Einblicke in mir noch vor wenigen Monaten vollkommen unbekannte Gebiete ermöglicht haben.
Ralf
Hallo Ralf.
Da ja opener.opener offensichtlich ein gültiges object darstellt - was sollte ich danach zwecks Test anhängen?
Schau einfach einmal nach, was alles zur Verfügung steht:
var str_output = '';
var obj_obj = opener.opener;
if (obj_obj) {
for (mix_property in obj_obj) {
str_output += '[' + mix_property + '] = ' + obj_obj[mix_property] + "\n";
}
alert(str_output);
}
Einen schönen Freitag noch.
Gruß, Ashura
hallo Rouven,
ich gebe ja zu, dass man sich an den Ton hier im Forum vielleicht etwas gewöhnen muss, vor allem wenn du auf zwei vom Kaliber Cheatah oder Christoph Schnauß stößt
Ähm ...
ist das nun ein Kompliment oder eine Warnung? Ich verwahre mich strikt dagegen, gemeinsam mit Cheatah in ein Kaliber gestopft zu werden - es könnte halt eng werden, schließlich ist mir, wie in der Lounge bereits debattiert, bedauerlicherweise in den letzten Jahren ein Bauch gewachsen. Andrerseits hat Cheatah (dessen Bauch ich nicht kenne) einfach schon viel öfter recht gehabt als ich und ist derzeit wohl auch der einzige "Forumsmethusalem," der sich nahezu von der Geburt des Forum an bis hierher immer wieder mit hilfreichen Hinweisen meldet. Ich bin erst vor knapp sieben Jahren hier ins Forum gekommen, da war Cheatah schon da, und jahrelang war er der unangefochtene Spitzenreiter der "Vielposter" ...
aber alles was dir die beiden sagen wollten ist: Das geht, und zwar eigentlich so wie du es vorgenommen hast
Kriegst eine Eins mit Sternchen ;-)
Grüße aus Berlin
Christoph S.
Hi!
*lol*
n8!
MfG
Rouven
Also:
Fenster1 macht window.open("Fenster2")
Fenster2 macht window.open("Fenster3")
Hallo !
Gib dem Elternfenster mal einen Namen, z.B. self.name="hauptfenster" und versuch über einen einfachen Target-Befehl im Link-Tag darauf zuzugreifen... Ob das geht weiß ich nicht, kann das jetzt aber auch nicht ausprobieren. Auf der ersten Ebene klappt das jedenfalls. Vielleicht geht das auch mit parent.opener... oder so !?
Spiel halt mal ein bißchen rum..
Gruß Frodo
Also:
Fenster1 macht window.open("Fenster2")
Fenster2 macht window.open("Fenster3")Kann ich nun in dem Code von Fenster3 auf den Inhalt von Fenster1 zugreifen?
opener.opener geht anscheinend nicht.
Doch, wenn alle drei Seiten auf der gleichen Domain liegen und keine Frames beinhalten geht das.
Struppi.
Doch, wenn alle drei Seiten auf der gleichen Domain liegen und keine Frames beinhalten geht das.
Kannst du dir dann mal mein Posting von 11:37 ansehen:
http://forum.de.selfhtml.org/?t=122894&m=790811
Ralf
Kannst du dir dann mal mein Posting von 11:37 ansehen:
Bereits geschehen.
http://forum.de.selfhtml.org/?t=122894&m=790811
In der Forumshilfe stehen auch Tipps zur Bedienung des Forums einer URL ist es leichter zu folgen, wenn sie anklickbar ist.
http://forum.de.selfhtml.org/hilfe/bedienung.htm#verweise-einbinden
Struppi.