Struppi: Mit doc.writeln erzeugte iframes und deren Inhalt

Beitrag lesen

Hallo,

ich habe folgendes Problem: ich arbeite an einer HTML-Seite, deren eigentlicher Inhalt komplett per document.writeln() erzeugt wird. Im speziellen gehts um einen iframe, dessen Inhalt ich auch erst noch generiere. Das sieht ungefähr so aus (stilisiert):

Das ist ja hart, warum machst du das so?
Mal abgesehen, dass es für keinen, nicht mal dich einen nutzen hat.

Und wenn du es so machen mußt (was ich mir nicht vorstellen kann), dann verwende Frames in die du den Inhalt reinschreibst, aber nicht das gleiche Dokument in dem auch dein JS ist, da du damit das Skript überschreibst.

document.writeln( '<html><body><iframe id="myiframe"></iframe></body></html>' );

Warum nicht einfach:
<html>
<body>
<iframe id="myiframe"></iframe>
</body></html>

var myIFrame = eval( 'parent.myiframe' );

selten eine überflüssige verwendung von eval gesehen.
eval ist evil und wie immer auch hier absolut nicht nötig:

var myIFrame = parent.myiframe;

Dann schreibe ich den Content in den iframe (ich verwende also keine weitere HTML-Datei)

myIFrame.document.writeln( iframeContent );

im zweifelsfall lieber:
myIFrame.innerHTML = ...

Danach muß ich die Größe des iframes an seinen Inhalt anpassen, d.h., ich hole mir eine referenz auf die Tabelle im iframe-Content:

var myTable = myIFrame.document.getElementById( 'mytable' );

Ohne zu Wissen, das das Dokument schon fertig gerendert ist wirst du hier imer schwierigkeiten bekommen.
Da das onload event bei dynamischen Dokumenten nicht feuert, musst du eine Schleife mit setTimeout machen, die immer wieder überprüft ob das was du suchst wirklich vorhanden ist.

BTW, document.writeln ist verpöhnt nimm document.write()
(wobei das eher historische Gründe hatte, da einige Mac Browser, damit Abstürze verursachten)

Struppi.