Iframe 高度自適應(yīng)(兼容IE/Firefox、同域/跨域)
發(fā)布時(shí)間:2010-03-17 00:09:07 作者:佚名
我要評(píng)論

在實(shí)際的項(xiàng)目進(jìn)行中,很多地方可能由于歷史原因不得不去使用iframe,包括目前正火熱的應(yīng)用開發(fā)也是如此。
隨之而來的就是在實(shí)際使用iframe中,會(huì)遇到iframe高度的問題,由于被嵌套的頁面長度不固定而顯示出來的滾動(dòng)條,不僅影響美觀,還會(huì)對用 戶操作帶來不便。于是自動(dòng)調(diào)整iframe的高度就成為本文的重點(diǎn)。
采用JavaScript來控制iframe元素的高度是iframe高度自適應(yīng)的關(guān)鍵,同時(shí)由于JavaScript對不同域名下權(quán)限的控制,引 發(fā)出同域、跨域兩種情況。
同域時(shí)Iframe高度自適應(yīng)
下面的代碼兼容IE/Firefox瀏覽器,控制id為“iframeid”的iframe的高度,通過JavaScript取得被嵌套頁面最終高度,然 后在主頁面進(jìn)行設(shè)置來實(shí)現(xiàn)。
代碼如下,可復(fù)制。另外,請注意此解決方案僅供同域名下使用。
<script type="text/javascript">
function SetCwinHeight(){
var iframeid=document.getElementById("iframeid"); //iframe id
if (document.getElementById){
if (iframeid && !window.opera){
if (iframeid.contentDocument && iframeid.contentDocument.body.offsetHeight){
iframeid.height = iframeid.contentDocument.body.offsetHeight;
}else if(iframeid.Document && iframeid.Document.body.scrollHeight){
iframeid.height = iframeid.Document.body.scrollHeight;
}
}
}
}
</script>
<iframe width="100%" id="iframeid" onload="Javascript:SetCwinHeight()" height="1" frameborder="0" src="kimi.php"></iframe>
跨域時(shí)Iframe高度自適應(yīng)
在主頁面和被嵌套的iframe為不同域名的時(shí)候,就稍微麻煩一些,需要避開JavaScript的跨域限制。
原理:現(xiàn)有iframe主頁面main.html、被iframe嵌套頁面iframe.html、iframe中介頁面agent.html三 個(gè),通過main.html(域名為http://www.ccvita.com)嵌套iframe.html(域名為:http: //www.phpq.net),當(dāng)用戶瀏覽時(shí)執(zhí)行iframe.html中的JavaScript代碼設(shè)置iframeC的scr地址中加入 iframe頁面的高度,agent.html(域名為:http://www.ccvita.com)取得傳遞的高度,通過JavaScript設(shè)置 main.html中iframe的高度。最終實(shí)現(xiàn)預(yù)期的目標(biāo)。
代碼下載:http://xiazai.jb51.net/201003/yuanma/css_iframe.rar
iframe主頁面main.html
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>iframe 主頁面</title></head>
<body>
<div style="border:1px solid #ccc;padding:10px;">
<iframe id="frame_content" name="frame_content" src="iframe.html" width="100%" height="0" scrolling="no" frameborder="0"></iframe>
尾部
</body>
</html>
采用JavaScript來控制iframe元素的高度是iframe高度自適應(yīng)的關(guān)鍵,同時(shí)由于JavaScript對不同域名下權(quán)限的控制,引 發(fā)出同域、跨域兩種情況。
同域時(shí)Iframe高度自適應(yīng)
下面的代碼兼容IE/Firefox瀏覽器,控制id為“iframeid”的iframe的高度,通過JavaScript取得被嵌套頁面最終高度,然 后在主頁面進(jìn)行設(shè)置來實(shí)現(xiàn)。
代碼如下,可復(fù)制。另外,請注意此解決方案僅供同域名下使用。
復(fù)制代碼
代碼如下:<script type="text/javascript">
function SetCwinHeight(){
var iframeid=document.getElementById("iframeid"); //iframe id
if (document.getElementById){
if (iframeid && !window.opera){
if (iframeid.contentDocument && iframeid.contentDocument.body.offsetHeight){
iframeid.height = iframeid.contentDocument.body.offsetHeight;
}else if(iframeid.Document && iframeid.Document.body.scrollHeight){
iframeid.height = iframeid.Document.body.scrollHeight;
}
}
}
}
</script>
<iframe width="100%" id="iframeid" onload="Javascript:SetCwinHeight()" height="1" frameborder="0" src="kimi.php"></iframe>
跨域時(shí)Iframe高度自適應(yīng)
在主頁面和被嵌套的iframe為不同域名的時(shí)候,就稍微麻煩一些,需要避開JavaScript的跨域限制。
原理:現(xiàn)有iframe主頁面main.html、被iframe嵌套頁面iframe.html、iframe中介頁面agent.html三 個(gè),通過main.html(域名為http://www.ccvita.com)嵌套iframe.html(域名為:http: //www.phpq.net),當(dāng)用戶瀏覽時(shí)執(zhí)行iframe.html中的JavaScript代碼設(shè)置iframeC的scr地址中加入 iframe頁面的高度,agent.html(域名為:http://www.ccvita.com)取得傳遞的高度,通過JavaScript設(shè)置 main.html中iframe的高度。最終實(shí)現(xiàn)預(yù)期的目標(biāo)。
代碼下載:http://xiazai.jb51.net/201003/yuanma/css_iframe.rar
iframe主頁面main.html
復(fù)制代碼
代碼如下:< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>iframe 主頁面</title></head>
<body>
<div style="border:1px solid #ccc;padding:10px;">
<iframe id="frame_content" name="frame_content" src="iframe.html" width="100%" height="0" scrolling="no" frameborder="0"></iframe>
尾部
</body>
</html>
相關(guān)文章
- 小編今天為大家介紹一篇HTML自適應(yīng)表格的方法,希望對大家有所幫助。2013-04-03
css 圖片自適應(yīng)寬度 CSS實(shí)現(xiàn)控制圖片自適應(yīng)顯示寬度代碼
由于用戶上傳的圖片太大自己又不去調(diào)解,導(dǎo)致展示的時(shí)候圖片太大撐開了,直接影響了界面的美觀度,于是想使用css屬性嘗試控制下:給圖片設(shè)置顯示最大的寬度,還好Firefox/Ope2013-02-06左定寬度右自適應(yīng)寬度并且等高布局實(shí)現(xiàn)代碼
左側(cè)固定寬,右側(cè)自適應(yīng)屏幕寬;左右兩列,等高布局;左右兩列要求有最小高度,例如:200px;(當(dāng)內(nèi)容超出200時(shí),會(huì)自動(dòng)以等高的方式增高)要求不用JS或CSS行為實(shí)現(xiàn),那么下面2012-12-24display:table-cell實(shí)現(xiàn)兼容性的兩欄自適應(yīng)布局實(shí)現(xiàn)代碼
display:table-cell實(shí)現(xiàn)兼容性的兩欄自適應(yīng)布局,需要的朋友可以參考下2012-12-07網(wǎng)頁設(shè)計(jì)技巧:iframe自適應(yīng)高度的問題
所謂iframe自適應(yīng)高度,就是,基于界面美觀和交互的考慮,隱藏了iframe的border和scrollbar,讓人看不出它是個(gè)iframe2012-11-12- 寬度自適應(yīng):就是元素的寬度根居里面的內(nèi)容來變化2012-06-14
Button在IE6、7下的自適應(yīng)寬度問題解決方法
很早就遇到過這么個(gè)小問題,但由于其并未影響到實(shí)際作用和美觀就沒有正面解決它,現(xiàn)在,我們來試著解決它2012-02-23div模擬textarea文本域?qū)崿F(xiàn)高度自適應(yīng)效果代碼
textarea標(biāo)簽為表單元素,一般用在多行文字的輸入。在web應(yīng)用上常見的是評(píng)論輸入框,微博信息輸入框等。2010-12-27div完美自適應(yīng)動(dòng)態(tài)上下左右居中
div完美自適應(yīng)動(dòng)態(tài)上下左右居中,多用于信息提示框效果。2010-08-10CSS min-height IE6、IE7、FF下DIV自適應(yīng)高度
IE6、IE7、FF下DIV自適應(yīng)高度2010-05-13