2009-04-05 7 views
0

J'ai écrit un script Javascript qui redimensionne automatiquement la hauteur d'un IFrame, en fonction de son contenu. Ceci est fait dès que le contenu de la page encadrée est produit; dans Firefox pas de problème, mais dans IE le script est correctement exécuté mais aucun effet n'est vu: la méthode est appelée dans une fonction de rappel. Des sugestions? Si j'exécute la méthode à l'aide d'un bouton, cela fonctionne parfaitement et le cadre est redimensionné.Hauteur de l'élément HTML Propriété non définie par Internet Explorer

Je n'ai pas le code juste devant moi; la méthode de redimensionnement ressemble à ceci:

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

Et la fonction d'appel est comme ceci:

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

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

J'utilise la bibliothèque Salesforce Ajax.

+0

Avez-vous trouvé un fichier javascript? – hunter

Répondre

1

J'ai trouvé que dans certains cas dans les propriétés IE telles que offsetHeight, clientHeight et scrollHeight ne sont pas correctement définies lorsque du nouveau contenu a été ajouté. J'ai dû utiliser setTimeout pour permettre à l'affichage d'être repeint avant de pouvoir obtenir des valeurs précises de ces propriétés.

+0

c'est une solution non concevable ... demain je vais essayer cette solution ... très très ennuyeux! Tnx –

+0

ça marche parfaitement! il semble que l'appel de la méthode de redimensionnement retardé rend IE conscient de la hauteur du cadre. Comportement étrange. tnx –

1

Difficile de vraiment déboguer votre code sans le voir, mais l'exemple suivant fonctionne bien pour moi dans IE et 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

le problème est le redimensionnement basé sur la hauteur de l'iframe actuel –

+0

a mis à jour la fonction onframeload pour définir la hauteur en fonction de l'offsetHeight de votre contenu –