Hallo zusammen
Ich habe eine Webform, welche unter anderem ein Iframe enthält.
Der Inhalt des Iframes wird durch einen HttpHandler generiert.
Gibt es einen Event, welcher greift wenn der Inhalt des Iframe fertig geladen ist?
Gruss aus der Schweiz
Vermutung:
Ich denke nicht das ein solcher Event gefeuert wird, da die Seite schon an den Client übergeben wurde, wenn das iFrame geladen wird.
Was möchtest Du denn genau machen?
Der Inhalt ist ein mht-File, meist mit Bildern. Sobald der Inhalt fertig geladen wurde, möchte ich die Höhe des Iframe so einstellen, dass der User nicht mehr scrollen muss.
Dazu will ich kurz nach dem Laden die ScrollHeight des Iframe auslesen, und somit die Höhe des Iframes anpassen. (Da habe ich aber schon gewisse Codes gefunden, die (möglicherweise) funktionieren ^^).
Dies kann aber eben erst erfolgen, wenn das Iframe (nicht das Control selbst) sondern der Inhalt komplett geladen ist!
Theoretisch könntest Du abfragen, ob ein bestimmtes Objekt (z.B. Hidden-Field) im iFrame vorhanden ist. Wenn dies der Fall ist, muss das IFrame geladen worden sein.
Allerdings werden Bilder ja unabhängig davon geladen.....
Oder könnte man nicht einen Timer oder so einbauen? Das man vielleicht sagt nach 10 Sekunden wird es erst geändert?
Man könnte noch etwas zweites (ausser dem mht) ins iframe drücken? Aber das garantiert dann nicht umbedingt dass es nach dem mht geladen wird? Oder wie meintest du das kai?
Grüsse
Whisky (hat eh keine ahnung ^^)
Home should be clean enough to be healthy, and dirty enough to be happy 🙂
Original von MajorWhisky-w
Oder könnte man nicht einen Timer oder so einbauen? Das man vielleicht sagt nach 10 Sekunden wird es erst geändert?
Man könnte noch etwas zweites (ausser dem mht) ins iframe drücken? Aber das garantiert dann nicht umbedingt dass es nach dem mht geladen wird? Oder wie meintest du das kai?
Ja, so ungefähr meinte ich das. Ich würde es folgendermaßen lösen:
Überprüfen ob ein bestimmtes Element im iFrame vorhanden ist (Natürlich mit Schleife und Timer)
Zusätzlich einen weiteren Timer um sicherzustellen, dass andere Elemente (wie Bilder) geladen wurden. 100% sicher ist das allerdings nicht.
Ich meine mich auch zu erinnern, dass man per <image>.complete abfrage konnte ob ein Bild geladen ist. Allerdings bin ich mir nicht sicher ob das tatsächlich funktioniert. Wenn doch, dann sollte diese Methode meinen zweiten Schritt ersetzen 🙂
Danke für deine Vorschläge, ich probiers mal aus......... 👍
Normalerweise dürfte das mit Serverbasierenden Scripts garnicht gehen. Mit JavaScript sollte das allerdings möglich sein.
Original von DarkKiller
Normalerweise dürfte das mit Serverbasierenden Scripts garnicht gehen. Mit JavaScript sollte das allerdings möglich sein.
Hat ja auch Niemand geschrieben....
Wenn es im Kontext nicht zu erkennen war, alle meine aufgezeigten Lösungen stellen Lösungen per JavaScript dar.
Serverseitig kannst Du nichts machen.
Mach's so...
// parent.htm
...
<script type="text/javascript">
function setDimensions()
{
var iframe = frames[0];
var iframeObj = document.getElementsByTagName('iframe')[0];
iframeObj.style.width = iframe.document.body.width;
iframeObj.style.height = iframe.document.body.height;
};
</script>
...
// iframe.htm
...
<body onload="parent.setDimensions()">
...
Jede Function/Variable auf unterster Ebene eines Seitenskripts wird automatisch eine Methode/Eigenschaft des betreffenden window Objekts. Über die parent Eigenschaft des iframe-windows kannst Du also diese Members ansprechen. Machst Du das beim onload Event, ist sichergestellt, dass die Seite auch bereits komplett geladen wurde.
Grüsse
Cord
Erstmal danke für den Codeausschnitt, jedoch bleibt noch ein Problem:
Wie kann ich den Body-Tag im iframe.htm verändern?
Der Iframe-Inhalt wird aus einer SQL-Datenbank gelesen und zu einem Mht-File zusammengewurstelt.
[EDIT]
Habs geschafft, aber an einem anderen Ort. Ich füge das betreffende Stück Code einfach schon beim Speichern des Datensatzes ein.
Das ist meine Javascript-Funktion auf der aspx-Seite mit dem Iframe:
function setDimensions()
{
h = ifrmMht.document.body.scrollHeight;
w = ifrmMht.document.body.scrollWidth;
document.getElementById("ifrmMht").style.height = h;
document.getElementById("ifrmMht").style.width = w;
};
und das füge ich beim Speichern zusätzlich in den BODY-Tag ein:
onload="parent.setDimensions()"
Das Ganze funktioniert auch mit Bilder, es wird gewartet bis alles geladen ist, danach wird resized.
Habs auch bei dotnet-snippets.de hinterlegt ^^