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