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