Der Martin: Mittels Javascript Werte auf die nächste html übergeben

Beitrag lesen

Hallo,

   function next(){
	var x = window.open("seite2.html");
	var i=x.document.getElementById("ergebnis");
	alert(i); //null
	[...]

Moment, Moment, nicht so schnell! Du sagst hier dem Kellner: "Für mich bitte einmal Schnitzel mit Pommes", und Sekundenbruchteile später greifst du nach dem Besteck und erwartest, dass ein Teller mit Schnitzel und Pommes vor dir steht. So geht's natürlich nicht!

Mit dem Aufruf von window.open() machst du der Javascript-Engine erstmal nur klar, was du gern hättest. Das neue window-Objekt für diesen Vorgang wird zwar sofort angelegt, aber zunächst nur als Skelett. Die tatsächliche Umsetzung der Anforderung, also das Laden der angeforderten Ressource, geschieht dann, wenn der Browser mal wieder "Zeit dafür hat", also frühestens, wenn der aktuelle Script-Block beendet ist. Darauf musst du warten.

Dafür gibt's prinzipiell zwei Möglichkeiten: Polling (immer wieder nachsehen) oder Callback (sich benachrichtigen lassen).

Polling wäre hier IMO eine schlechte Idee: Du kannst ein Stück JS mit setTimeout() oder setInterval() so lange immer wieder aufrufen und beenden, bis dein getElementById() im frischen Dokument nicht mehr null ergibt.

Eleganter ist die Callback-Strategie: Unmittelbar nach dem Aufruf von window.open() gibst du dem frischen window-Objekt einen onload-Handler, so dass eine Funktion deiner Wahl aufgerufen wird, wenn das gewünschte Dokument fertig geladen ist. Dann und erst dann kannst du auf das neue Dokument zugreifen.
Bei der Gelegenheit könntest du auch gleichzeitig einen onerror-Handler dranhängen, so dass du auch eine Rückinfo kriegst, wenn das Laden fehlschlägt.

So long,
 Martin