2009-04-05 4 views
0

Ich habe ein Javascript-Skript geschrieben, das automatisch die Höhe eines IFrames abhängig vom Inhalt ändert. Dies geschieht, sobald der Inhalt der gerahmten Seite erstellt ist; in Firefox kein Problem, aber im IE wird das Skript korrekt ausgeführt, aber es wird kein Effekt gesehen: Die Methode wird in einer Callback-Funktion aufgerufen. Irgendwelche Vorschläge? Wenn ich die Methode mit einer Schaltfläche ausführen, funktioniert es perfekt, und der Rahmen wird in der Größe geändert.Die Height-Eigenschaft des HTML-Elements wurde nicht vom Internet Explorer festgelegt.

Ich habe nicht den Code direkt vor mir; die Redimensionierung Methode sieht wie folgt aus:

function resizeFrame(){ 
    var frame = parent.document.getElementsById(window.me); 
    frame.style.height = document.offsetHeight; 
} 

Und die anrufende Funktion ist wie folgt:

//init function 
bunding.doSomeWork(callbackFunction); 
... 

function callbackFunction() 
{ 
    //does some HTML output 
    resizeFrame(); 
} 

ich Salesforce Ajax-Bibliothek bin mit.

+0

Haben Sie Javascript? – hunter

Antwort

1

Ich habe festgestellt, dass in einigen Fällen in IE-Eigenschaften wie offsetHeight, clientHeight und scrollHeight nicht korrekt festgelegt sind, wenn neuer Inhalt hinzugefügt wurde. Ich musste setTimeout verwenden, damit die Anzeige neu gezeichnet werden kann, bevor man genaue Werte von solchen Eigenschaften erhalten kann.

+0

das ist eine unkonventionelle lösung ... morgen werde ich diese lösung ausprobieren ... sehr sehr nervig! Tnx –

+0

das funktioniert einwandfrei! Es scheint, dass das Aufrufen der Größenänderungsmethode den IE auf die Höhe des Frames aufmerksam macht. Seltsames Verhalten. tnx –

1

Schwer zu debuggen Sie Ihren Code, ohne es zu sehen, aber das folgende Beispiel funktioniert gut für mich in IE und Firefox.

<!DOCTYPE html> 
<html> 
<head> 
    <title>so-iframeResize</title> 
    <script type="text/javascript" > 

    onframeload=function(iframe) { 
     var doc = iframe.contentWindow.document; 
     iframe.style.height = Math.max(
     doc.getElementsByTagName("html")[0].offsetHeight, 
     doc.body.offsetHeight // IE prefers this value 
    ) + "px"; 
    }; 

    </script> 
</head> 
<body> 
    <div id="page"> 
    <iframe src="about:blank" onload="onframeload(this)"> 
    </iframe> 
    </div> 
</body> 
</html> 
+0

Das Problem ist die Größenanpassung basierend auf der Höhe des aktuellen Iframes –

+0

aktualisiert die Onframe-Funktion, um die Höhe nach dem OffsetHeight Ihres Inhalts einzustellen –