JQUERY/Javascriptでiframeの高さを内部のコンテンツに応じて動的にする
iframeでaspxウェブページを読み込んでいます。iframe 内のコンテンツは、iframe の高さを超えることができます。iframeにはスクロールバーがあってはなりません。
iframe内にはラッパーdiv
タグがあり、基本的にこれがすべてのコンテンツです。 リサイズを実現するためにjQueryを書いた:
$("#TB_window", window.parent.document).height($("body").height() + 50);
ここで
TB_windowは
Iframe` が含まれる div です。
body` - iframe 内の aspx の body タグ。
このスクリプトは iframe のコンテンツに添付される。親ページから TB_window
要素を取得しています。これはChromeでは問題なく動作しますが、FirefoxではTB_windowが崩れてしまいます。なぜそうなるのか、本当に混乱しています。
191
18
IFRAME
'のコンテンツの高さは、次のようにして取得できます: contentWindow.document.body.scrollHeight
を使用します。IFRAME`が読み込まれたら、次のようにして高さを変更することができる:
そして、
IFRAME
タグ上で次のようにハンドラをフックする:アリストスへの少し改良された答え...
そして、iframeの中で次のように宣言します:
X-FRAME-OPTIONS:Allow-From [safariまたはchromeではサポートされていません](https://developer.mozilla.org/en-US/docs/HTTP / X-Frame-Options)。 代わりに別のアプローチに行きました。DisqusのBen Vinegarによって与えられたプレゼンテーションにあります。 アイデアは、イベントリスナーを親ウィンドウに追加し、iframe内でwindow.postMessageを使用して、親にイベントを送信して何かをするように指示することです(iframeのサイズを変更)。
親ドキュメントに、イベントリスナーを追加します。
そしてiframe内に、メッセージを投稿する関数を書きます:
最後に、iframe内で、onLoadをボディタグに追加して、サイズ変更機能を実行します。
これをiframeに追加します。これは私にとってはうまくいきました。
jQueryを使用する場合は、次のコードを試してください。
iFrameでコンテンツの高さを取得するために確認できる4つの異なるプロパティがあります。
悲しいことに、それらはすべて異なる答えを出すことができ、これらはブラウザ間で一貫していません。 ボディマージンを0に設定すると、「document.body.offsetHeight」が最良の答えを示します。 正しい値を取得するには、この関数を試してください。これは、 iframe-resizerライブラリから取得されます。ライブラリは、コンテンツが変更されたときにiFrameを正しいサイズに保つか、ブラウザーがサイズ変更されます。
他の回答はうまくいかなかったので、いくつかの変更を加えました。 これが役立つことを願っています。
念のため、これは誰にでも役立ちます。 これを機能させるために髪を抜いていたのですが、iframeに高さ100%のクラスエントリがあることに気付きました。 これを削除すると、すべてが期待どおりに機能しました。 したがって、cssの競合を確認してください。
resizeIframeに繰り返しrequestAnimationFrameを追加することもできます(例:. @BlueFishの回答から)ブラウザがレイアウトをペイントする前に常に呼び出され、コンテンツの高さが変更された場合にiframeの高さを更新できます。 例えば. 入力フォーム、遅延読み込みコンテンツなど.
関連する質問はこちらから参照できます-https://stackoverflow.com/questions/18765762/how-to-make-width-and-height-of-iframe-same-as-its-parent-div/38917939# 38917939。
動的高さを設定するには-。
1。 クロストメインのiFramesと親と通信する必要があります。 2。 次に、iframeのスクロールの高さ/コンテンツの高さを親ウィンドウに送信できます。
そしてコード-https://gist.github.com/mohandere/a2e67971858ee2c3999d62e3843889a8。
javscript / jqueryを使用するのではなく、私が見つけた最も簡単な方法は次のとおりです。
。
。
ここで1vh =ブラウザウィンドウの高さの1%。 したがって、設定する高さの理論値は100vhですが、実際には98vhが魔法をかけました。
PHP htmlspecialchars()を使用したサンプル+高さが存在し、>かどうかを確認します。 0:
。
。
トロイからの答えはうまくいかなかった。 これはajax用に再作成された同じコードです。
下部が切り取られているように見えるウィンドウのチャンクに追加するには、特にスクロールしていない場合は、次のように使用しました。
これは、jqueryのないソリューションが必要な場合に役立ちます。 その場合は、コンテナを追加して、パディングをパーセンテージで設定してください。
HTMLサンプルコード:
CSS例コード:
簡単な解決策は、コンテンツ領域の幅と高さを測定し、それらの測定値を使用して下部パディングパーセンテージを計算することです。
この場合、測定値は1680 x 720 pxであるため、下部のパッドは720/1680 = 0.43 * 100で、43%になります。
BlueFishに対する回答が少し改善されました。..
これには、レスポンシブデザインに適したウィンドウ画面(ブラウザ、電話)の高さと、高さの高いiframeが考慮されます。 パディングは、画面全体を通過する場合に、iframeの上下に必要なパディングを表します。
および/または
スタックオーバーフローの質問 https://stackoverflow.com/questions/806402 を参照してください。
jQueryでボディの高さを求めるには、これを試してみてください:
Firebug]1の場合は値がありません。おそらくこれが問題なのでしょう。