亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何設(shè)置iframe高度自適應(yīng)在跨域情況下的可用方法

 更新時間:2013年09月06日 18:26:50   作者:  
iframe的高度需要根據(jù)子頁面的實際高度來進(jìn)行調(diào)整,但是如果子頁面不在同一域中怎么辦?這時候腳本沒有辦法獲取到子頁面的高度,存在JavaScript跨域的問題
在頁面上使用iframe來動態(tài)加載頁面內(nèi)容是網(wǎng)頁開發(fā)中比較常見的方法。在父頁面中給定一個不帶滾動條的iframe,然后對屬性src指定一個可加載的頁面,這樣當(dāng)父頁面被訪問的時候,子頁面可以被自動加載。iframe的高度需要根據(jù)子頁面的實際高度來進(jìn)行調(diào)整。如果iframe的高度小于子頁面的實際高度,超出的部分無法顯示;相反,如果iframe的高度過高,則頁面上會出現(xiàn)大量的空白區(qū)域。我們可以通過屬性或者CSS來設(shè)置iframe的高度,當(dāng)不確定子頁面內(nèi)容的高度時,也可以通過腳本來進(jìn)行動態(tài)指定。但是如果子頁面不在同一域中怎么辦?這時候腳本沒有辦法獲取到子頁面的高度,存在JavaScript跨域的問題!

如題所述,本文在介紹可用方法的同時,也向大家詢問除下文列出來的方法之外是否還有其它方法可尋?

通過屬性或CSS來設(shè)置iframe的高度這里就不再具體介紹了。首先來看看如何通過腳本進(jìn)行設(shè)置。
復(fù)制代碼 代碼如下:

function ChangeFrameHeight(id) {
var count = 1;

(function() {
var frm = document.getElementById(id);
var subWeb = document.frames ? document.frames[id].document : frm.contentDocument;

if (subWeb != null) {
var height = Math.max(subWeb.body.scrollHeight, subWeb.documentElement.scrollHeight);
frm.height = height;
}
if (count < 3) {
count = count + 1;
window.setTimeout(arguments.callee, 2000);
}
})();
}

假設(shè)iframe子頁面和父頁面都在同一域內(nèi),通過該腳本可以對給定id的iframe高度進(jìn)行動態(tài)調(diào)整。為了防止父頁面在子頁面之前加載完成,該函數(shù)會每隔2秒重新執(zhí)行一次,一共執(zhí)行3次。極端情況下子頁面的加載速度會慢于父頁面,可適當(dāng)對執(zhí)行次數(shù)和時間做調(diào)整。
復(fù)制代碼 代碼如下:

<iframe frameborder="0" width="450" marginheight="0" marginwidth="0" scrolling="no" id="frm1" name="frm1" src="abc.html" onload="ChangeFrameHeight('frm1')"></iframe>

如果遇到子頁面跨域的問題,可通過HTML5的postMessage來實現(xiàn),但前提是子頁面需要主動向父頁面發(fā)送信息。下面是子頁面部分:
復(fù)制代碼 代碼如下:

<!DOCTYPE html>
<head>
</head>
<body onload="parent.postMessage(document.body.scrollHeight, 'http://target.domain.com');">
<h3>Got post?</h3>
<p>Lots of stuff here which will be inside the iframe.</p>
</body>
</html>

在父頁面中獲取到子頁面?zhèn)鬟f過來的信息,然后對iframe的高度進(jìn)行調(diào)整。
復(fù)制代碼 代碼如下:

<script type="text/javascript">
function resizeCrossDomainIframe(id, other_domain) {
var iframe = document.getElementById(id);
window.addEventListener('message', function(event) {
if (event.origin !== other_domain) return; // only accept messages from the specified domain
if (isNaN(event.data)) return; // only accept something which can be parsed as a number
var height = parseInt(event.data) + 32; // add some extra height to avoid scrollbar
iframe.height = height + "px";
}, false);
}
</script>

<iframe src='abc.html' id="frm1" onload="resizeCrossDomainIframe('frm1', 'http://example.com');">
</iframe>

有關(guān)如何使用HTML5的postMessage()方法可以查看這篇文章http://dev.w3.org/html5/postmsg/#web-messaging

但是在大多數(shù)情況下,iframe中所引用的子頁面除了和父頁面不在同一域之外,我們可能根本無法對子頁面進(jìn)行任何操作,或者說子頁面根本沒有提供Corss-document messaging功能。在這種情況下,通過postMessage()方法也無法獲取到子頁面的任何信息。由于無法和子頁面進(jìn)行任何交互,也就沒有辦法得知子頁面的document對象,從未無法根據(jù)子頁面的實際高度來調(diào)整父頁面iframe的height屬性了。

目前沒有其它實際有效的方法來處理上面遇到的問題。默認(rèn)情況下可以給iframe指定一個比較大的高度,這樣假設(shè)所引用的子頁面內(nèi)容不會超出范圍,除了在頁面上會留下部分空白區(qū)域外,內(nèi)容顯示基本不會有問題。

那是否還存在其它比較有效的解決方法呢?期待!

相關(guān)文章

  • 25個好玩的JavaScript小游戲分享

    25個好玩的JavaScript小游戲分享

    JavaScript 早已不只是一門寫寫網(wǎng)頁特效的腳本語言了,如今廣泛用于網(wǎng)站的前端交互。
    2011-04-04
  • 詳解bootstrap-fileinput文件上傳控件的親身實踐

    詳解bootstrap-fileinput文件上傳控件的親身實踐

    這篇文章主要介紹了詳解bootstrap-fileinput文件上傳控件的親身實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • javascript中Date對象的使用總結(jié)

    javascript中Date對象的使用總結(jié)

    本文介紹了Date對象的使用方法,清晰明了,實現(xiàn)方法有多種,僅供大家參考,希望對大家有所幫助,下面就跟小編一起來看看吧
    2016-11-11
  • 禁止IE用右鍵的JS代碼

    禁止IE用右鍵的JS代碼

    這篇文章主要介紹了禁止IE用右鍵的JS代碼,有需要的朋友可以參考一下
    2013-12-12
  • javascript+HTML5 canvas繪制時鐘功能示例

    javascript+HTML5 canvas繪制時鐘功能示例

    這篇文章主要介紹了javascript+HTML5 canvas繪制時鐘功能,結(jié)合實例形式分析了javascript+HTML5 canvas數(shù)值運算、圖形繪制與時間顯示相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • js實現(xiàn)select跳轉(zhuǎn)功能代碼

    js實現(xiàn)select跳轉(zhuǎn)功能代碼

    實現(xiàn)select跳轉(zhuǎn)的方法有很多,本例為大家介紹的是js實現(xiàn)的,通過location.href獲取跳轉(zhuǎn)地址,需要的朋友可以看看
    2014-10-10
  • JS彈出對話框?qū)崿F(xiàn)方法(三種方式)

    JS彈出對話框?qū)崿F(xiàn)方法(三種方式)

    這篇文章主要介紹了JS彈出對話框?qū)崿F(xiàn)方法,結(jié)合實例形式分析了三種方式,包括alert、confirm及prompt,非常簡單實用,需要的朋友可以參考下
    2015-12-12
  • nullJavascript中創(chuàng)建對象的五種方法實例

    nullJavascript中創(chuàng)建對象的五種方法實例

    今天上午,非常郁悶,有很多簡單基礎(chǔ)的問題搞得我有些迷茫,哎,代碼幾天不寫就忘。目前又不當(dāng)COO,還是得用心記代碼哦!
    2013-05-05
  • electron-builder 的基本使用及electron打包步驟

    electron-builder 的基本使用及electron打包步驟

    electron-builder 作為一個用于 Electron 應(yīng)用程序打包的工具,需要下載并使用 Electron 運行時來創(chuàng)建可執(zhí)行文件,這篇文章主要介紹了electron-builder 的基本使用,需要的朋友可以參考下
    2023-12-12
  • 不用AI也能實現(xiàn)的文字自動播報(SpeechSynthesis文本實例合成)

    不用AI也能實現(xiàn)的文字自動播報(SpeechSynthesis文本實例合成)

    SpeechSynthesis是HTML5的一個新特性,基于SpeechSynthesis可以實現(xiàn)在客戶瀏覽器端進(jìn)行動態(tài)文本的語音合成播放,這篇文章主要介紹了不用AI也能實現(xiàn)的文字自動播報(SpeechSynthesis文本實例合成),需要的朋友可以參考下
    2023-03-03

最新評論