Hallo,
... Dir ist schon klar ...
erklärst du's mir?
Von vorne:
v1 = window.open();
Damit erzeugst du eine globale Variable namens v1. Globale Variablen sind Eigenschaften vom Fensterobjekt, in dessen Kontext das JavaScript ausgeführt wird. Obige Zuweisung erzeugt also die Eigenschaft window.v1.
Wenn du den Variablennamen in einer String-Variable hast, dann kannst du über die Klammer-Schreibweise auf das gespeicherte Fensterobjekt zugreifen:
var variablenname = "v1"
alert( window[variablenname] );
window[variablenname] ergibt dann dasselbe wie window.v1.
Gut, jetzt machst du das ganze indirekt aus einem Popup-Fenster heraus. Auf das gewünschte Fensterobjekt greifst du mit opener zu. Also wäre opener.v1 die besagte globale Variable und du könntest, wenn du ihren Namen als String hast, über opener[variablenname] darauf zugreifen.
Der Code opener[alleNamen[j-1]] läuft auf ein opener["v1"] usw. hinaus. Der sucht beim übergeordneten Fensterobjekt nach einer globalen Variable mit dem Namen »v1«. Das funktioniert natürlich nur solange, wie du die Popup-Fenster auch mit v1 = window.open(...); v2 = window.open(...); usw. öffnest.
Wenn du aber die Referenzen auf die Popup-Fensterobjekte nicht mehr in den globalen Variablen v1, v2 usw. speicherst, sondern in einem Array, funktioniert auch opener["v1"] logischerweise nicht mehr. Stattdessen musst du auf den Array zugreifen und darin über den Index das Popup-Fensterobjekt nachschlagen.
Im Ursprungsfenster z.B.:
var fensterobjekte = new Array();
fensterobjekte[0] = window.open(...);
Im Popup-Fenster dann:
var i = 0; // Fensternummer
alert( opener.fensterobjekte[i] ); // ergibt das Fensterobjekt
Mathias