2009-04-05 13 views
0

IFrameの高さをコンテンツの内容によって自動的に変更するJavaScriptスクリプトを作成しました。これは、フレーム化されたページのコンテンツが作成されるとすぐに実行されます。 Firefoxでは問題はありませんが、IEではスクリプトは正しく実行されますが、効果は見られません。このメソッドはコールバック関数で呼び出されます。すべての訴訟? ボタンを使用してメソッドを実行すると、完全に機能し、フレームのサイズが変更されます。HTML要素の高さプロパティがInternet Explorerで設定されていません

私はコードを私の目の前に置いていません。サイズ変更方法は、次のようになります。

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

そして、呼び出し元の関数は、このようなものです:

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

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

私はSalesforceのAjaxのライブラリを使用しています。

+0

いくつかのjavascriptがありますか? – hunter

答えて

1

新しいコンテンツが追加されたときにoffsetHeight、clientHeight、scrollHeightなどのIEプロパティが正しく設定されないことがあります。私はそのようなプロパティから正確な値を得る前に、ディスプレイを再描画するためにsetTimeoutを使用しなければなりませんでした。

+0

それは非合理な解決策です...明日私はこの解決策を試してみる...非常に非常に迷惑な!tnx –

+0

は完璧に動作します!サイズ変更メソッドの呼び出しを遅らせると、IEはフレームの高さを認識しているように見えます。奇妙な行動。 tnx –

1

実際にはコードを表示せずにデバッグするのは難しいですが、次の例はIEと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

現在のiframeの高さに基づいて問題のサイズが変更されています –

+0

onframeload関数を更新して、コンテンツのoffsetHeightに従って高さを設定しました –

関連する問題