2017-01-18 11 views
0

要素があるiframeがあり、コンテンツに合わせてiframeのサイズを変更しようとしています。 iframeを調べるとボディの高さは577pxですが、JavaScriptの高さにアクセスすると250pxと表示されます。iFrameの高さ検出が不正確な高さを返します

function getHeight(el) { 
    const {clientHeight, outerHeight, innerHeight, offsetHeight} = el; 
    return clientHeight || outerHeight || innerHeight || offsetHeight; 
} 

// called on iframe's onload event 
function onIframeLoad() { 
    var iFrame = document.getElementById('advertFrame'); 
    if(iFrame) { 
    var heightContainer = iFrame.contentWindow.document.body; 
    var height = getHeight(heightContainer) + 'px'; 
    iFrame.height = height; 
    iFrame.style.height = height; 
    } 
} 
+0

あなたがロードするコンテンツのIフレームを待たずに、すぐにページをロードした後、インラインフレームの初期高さを取得する可能性があります。 –

+0

@AliSheikhpourしかし、私の意図は、iframeのコンテンツの高さを知ることです。コンテンツを待たずにコンテンツをどのくらいの高さにすることができますか? – SimpleJ

+0

おそらく[この質問](http://stackoverflow.com/q/819416/215552)の答えはあなたを助けるでしょうか?あなたはコンテンツの高さに合わせてiframeを作成したい最初の人物ではありません... –

答えて

0

あなたがロードされるのiframeのコンテンツを待ってから、その高さを取得する必要があります。ここでは

は、私は、IFRAMEの高さを取得するために使用しているコードです。 Jqueryには "ready"が組み込まれていて、iframeコンテンツが読み込まれているかどうかを確認する機能があります。 「準備完了」は、イメージとメディアの完全な内容ではなく、ソースHTMLコードの読み込みを指します。そのため、画像やその他のコンテンツの初期高さを設定しなければなりません。

$(document).ready(function(){ 
    $('#advertFrame').ready(function() { 
     this.style.height = 
     this.contentWindow.document.body.offsetHeight + 'px'; 
    }); 
}) 

は、iframeの負荷試験のために、次の例をご確認ください:http://jsfiddle.net/ZrFzF/

+0

これは基本的にOPと同じコードですが、jQueryを使用しています。 –

+0

ありがとうございます。私はいくつかの説明でコードを変更しました。 –

関連する問題