ホームページ  >  記事  >  ウェブフロントエンド  >  iframe の適応性が高い content_html/css_WEB-ITnose

iframe の適応性が高い content_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-21 08:47:491354ブラウズ

JS の適応高さは、実際には、埋め込まれた Web ページの高さと同じになるように iframe の高さを設定し、スクロール バーやネストされたトレースが見えないようにすることです。ユーザーエクスペリエンスとウェブサイトの美しさにおいて重要な役割を果たします。

コンテンツが固定されている場合は、CSS を通じてその高さを直接定義でき、これにより上記の要件も達成できます。内容が不明または変更となる場合。現時点ではいくつかの状況があります。

iframe の内容は不明ですが、高さは予測可能です

現時点では、デフォルトの CSS 最小高さの値をそれに追加し、JavaScript を使用して同時に高さを変更できます。時間。一般的に使用される互換性のあるコードは次のとおりです:

// document.domain = "caibaojian.com";function setIframeHeight(iframe) {if (iframe) {var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;if (iframeWin.document.body) {iframe.height = iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight;}}};window.onload = function () {setIframeHeight(document.getElementById('external-frame'));};

デモ アドレス

ここのコンテンツを表示するにはログインしてコメントする必要があります

変更するだけです上記iframeのIDで十分です。または、HTML コードを汚染しないように、コードを iframe に直接記述することもできます。通常は、上記のコードを使用することをお勧めします。

<iframe src="backtop.html" frameborder="0" scrolling="no" id="external-frame" onload="setIframeHeight(this)"></iframe>

デモ 2

複数の iframe の場合

<script language="javascript">//输入你希望根据页面高度自动调整高度的iframe的名称的列表//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。//定义iframe的IDvar iframeids=["test"];//如果用户的浏览器不支持iframe是否将iframe隐藏 yes 表示隐藏,no表示不隐藏var iframehide="yes";function dyniframesize(){var dyniframe=new Array()for (i=0; i<iframeids.length; i++){if (document.getElementById){//自动调整iframe高度dyniframe[dyniframe.length] = document.getElementById(iframeids[i]);if (dyniframe[i] && !window.opera){dyniframe[i].style.display="block";if (dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight) //如果用户的浏览器是NetScapedyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight;else if (dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight) //如果用户的浏览器是IEdyniframe[i].height = dyniframe[i].Document.body.scrollHeight;}}//根据设定的参数来处理不支持iframe的浏览器的显示问题if ((document.all || document.getElementById) && iframehide=="no"){var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i]);tempobj.style.display="block";}}}if (window.addEventListener)window.addEventListener("load", dyniframesize, false);else if (window.attachEvent)window.attachEvent("onload", dyniframesize);elsewindow.onload=dyniframesize;</script>

デモ 3

既知の iframe の ID を呼び出す

function iframeAutoFit(iframeObj){setTimeout(function(){if(!iframeObj) return;iframeObj.height=(iframeObj.Document?iframeObj.Document.body.scrollHeight:iframeObj.contentDocument.body.offsetHeight);},200)}

デモ 4

コンテンツの幅が変わったときに iframe の高さを適応させる

<iframe src="backtop.html" frameborder="0" scrolling="no" id="test" onload="this.height=100"></iframe><script type="text/javascript">function reinitIframe(){var iframe = document.getElementById("test");try{var bHeight = iframe.contentWindow.document.body.scrollHeight;var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;var height = Math.max(bHeight, dHeight);iframe.height = height;console.log(height);}catch (ex){}}window.setInterval("reinitIframe()", 200);</script>

デモ 5
デバッグ実行ウィンドウを開いて操作を確認します。

クロスドメインでの iframe 適応高さ

クロスドメインの場合、js の同一生成元ポリシーにより、親ページの js は iframe ページの高さを取得できません。プロキシとして機能するにはページが必要です。
方法は次のとおりです。 www.a.com のページ a.html に www.b.com のページ c.html が含まれているとします。
www.a.com の下にある別のページ、agent.html をプロキシとして使用し、これを通じて iframe ページの高さを取得し、iframe 要素の高さを設定します。

a.html には iframe が含まれています:

<iframe src="http://www.b.com/c.html" id="Iframe" frameborder="0" scrolling="no" style="border:0px;"></iframe>

次のコードを c.html に追加します:

<iframe id="c_iframe"  height="0" width="0"  src="http://www.a.com/agent.html" style="display:none" ></iframe><script type="text/javascript">(function autoHeight(){var b_width = Math.max(document.body.scrollWidth,document.body.clientWidth);var b_height = Math.max(document.body.scrollHeight,document.body.clientHeight);var c_iframe = document.getElementById("c_iframe");c_iframe.src = c_iframe.src + "#" + b_width + "|" + b_height;  // 这里通过hash传递b.htm的宽高})();</script>

最後に、agent.html に js を追加します。 :

<script type="text/javascript">var b_iframe = window.parent.parent.document.getElementById("Iframe");var hash_url = window.location.hash;if(hash_url.indexOf("#")>=0){var hash_width = hash_url.split("#")[1].split("|")[0]+"px";var hash_height = hash_url.split("#")[1].split("|")[1]+"px";b_iframe.style.width = hash_width;b_iframe.style.height = hash_height;}</script>

agent.html は URL から幅と高さの値を取得し、iframe の高さと幅を設定します (agent.html は www.a.com の下にあるため、 a.html の操作時は動作しません。JavaScript の同一生成元制限の影響を受けます)

デモ 6

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。