首頁 > web前端 > js教程 > 如何跨域根據內容高度動態調整 Iframe 大小?

如何跨域根據內容高度動態調整 Iframe 大小?

DDD
發布: 2024-12-10 10:45:10
原創
782 人瀏覽過

How Can I Dynamically Resize an Iframe Based on its Content Height Across Domains?

根據內容高度調整iframe 的大小

使用iframe 顯示其他域的內容時,調整其高度以適應內容可以由於同源策略而成為一個挑戰。此策略限制不同網域上的頁面之間的 JavaScript 通訊。

解決方案:

要克服此限制,需要採用多步驟方法,涉及 iframe 內容和框架頁面。

1.跨域通訊:

由於 iframe 內容和框架頁位於不同網域,因此無法直接通訊。但是,可以使用另一個 iframe 來建立「管道」機制。

2.高度計算和訊息傳遞:

當iframe 內容載入時,它會計算其高度,並將框架頁面上隱藏iframe 的來源設定到同一網域上的說明頁面,並將計算出的高度傳遞給作為URL 中的參數。

3.輔助頁和父框架調整大小:

同一域上的輔助頁從iframe 內容接收高度並將其傳遞給父框架,然後父框架可以相應地調整iframe 的大小。

代碼:

框架頁:

<script type="text/javascript">
  function resizeIframe(height) {
    document.getElementById('myIframe').height = height + 60;
  }
</script>
<iframe>
登入後複製

Iframe內容:

<script type="text/javascript">
  function setIframeHeight() {
    var height = document.body.scrollHeight;
    document.getElementById('iframeResizer').src = 'helper.com?height=' + height;
  }
</script>
<iframe>
登入後複製

幫助程式頁面:

<script type="text/javascript">
  function resizeParentIframe() {
    var height = getParam('height');
    parent.parent.resizeIframe(height);
  }
  function getParam(name) {
    var regex = new RegExp("[\?&]" + name + "=([^&amp;#]*)");
    var results = regex.exec(window.location.href);
    return results ? results[1] : "";
  }
</script>
登入後複製

注意:

此解決方案假設同源策略允許iframe 內容和幫助程式頁面之間的JavaScript 通訊。如果不是這種情況,可能需要採取額外措施。

以上是如何跨域根據內容高度動態調整 Iframe 大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板