Iframe 自適應(yīng)高度并實時監(jiān)控高度變化的js代碼
更新時間:2009年10月30日 13:22:50 作者:
不得不用到iframe,且被強烈要求不能讓它出現(xiàn)滾動條!嵌入的頁面肯定是高度不一的,頁面中也不能出現(xiàn)大片空白,所以也不能寫死高度!真是麻鬼煩啊!
google N次 + 百度M次 + 試驗了1605次之后(聽說農(nóng)藥1605就是實驗了這么多次后出來的),得出下面成果,在IE7及Firefox3里試了下還能湊合著用用!
1、首先給出個Iframe。
<iframe id="ifrm"
marginheight="0"
marginwidth="0"
height="100"
width="1000"
frameborder="0"
scrolling="no"
src="xxxxx.html">
</iframe>
2、然后看看怎么獲取Iframe中的頁面的高度。
其實最麻煩的就是怎么讓獲取的高度準(zhǔn)確,不同的方式不同的瀏覽器中獲取到的值都會不一樣!暈啊~~。參考了多方意見得出以下javascript函數(shù)(doc參數(shù)為window.document對象):
function getDocHeight(doc)
{
//在IE中doc.body.scrollHeight的可信度最高
//在Firefox中,doc.height就可以了
var docHei = 0;
var scrollHei;//scrollHeight
var offsetHei;//offsetHeight,包含了邊框的高度
if (doc.height)
{
//Firefox支持此屬性,IE不支持
docHei = doc.height;
}
else if (doc.body)
{
//在IE中,只有body.scrollHeight是與當(dāng)前頁面的高度一致的,
//其他的跳轉(zhuǎn)幾次后就會變的混亂,不知道是依照什么取的值!
//似乎跟包含它的窗口的大小變化有關(guān)
if(doc.body.offsetHeight) docHei = offsetHei = doc.body.offsetHeight;
if(doc.body.scrollHeight) docHei = scrollHei = doc.body.scrollHeight;
}
else if(doc.documentElement)
{
if(doc.documentElement.offsetHeight) docHei = offsetHei = doc.documentElement.offsetHeight;
if(doc.documentElement.scrollHeight) docHei = scrollHei = doc.documentElement.scrollHeight;
}
/*
docHei = Math.max(scrollHei,offsetHei);//取最大的值,某些情況下可能與實際頁面高度不符!
*/
return docHei;
}
3、最后修改Iframe的高度,并用一個定時器來不間斷檢查它包含的頁面的高度變化。
function doReSize()
{
var iframeWin = window.frames['ifrm'];
var iframeEl = window.document.getElementById? window.document.getElementById('ifrm'): document.all? document.all['ifrm']: null;
if ( iframeEl && iframeWin )
{
var docHei = getDocHeight(iframeWin.document);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
else if(iframeEl)
{
var docHei = getDocHeight(iframeEl.contentDocument);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
}
function runResizeTask()
{
doReSize();
setTimeout("runResizeTask()",500);//每隔半秒執(zhí)行一次
}
runResizeTask();
在這里就沒有去考慮被包含的頁面中是否有折疊、隱藏/展現(xiàn)的情況了!
完整js代碼
<script language="javascript" type="text/javascript">
function getDocHeight(doc){
//在IE中doc.body.scrollHeight的可信度最高
//在Firefox中,doc.height就可以了
var docHei = 0;
var scrollHei;//scrollHeight
var offsetHei;//offsetHeight,包含了邊框的高度
if (doc.height){
//Firefox支持此屬性,IE不支持
docHei = doc.height;
}
else if (doc.body){
//在IE中,只有body.scrollHeight是與當(dāng)前頁面的高度一致的,
//其他的跳轉(zhuǎn)幾次后就會變的混亂,不知道是依照什么取的值!
//似乎跟包含它的窗口的大小變化有關(guān)
if(doc.body.offsetHeight) docHei = offsetHei = doc.body.offsetHeight;
if(doc.body.scrollHeight) docHei = scrollHei = doc.body.scrollHeight;
}
else if(doc.documentElement){
if(doc.documentElement.offsetHeight) docHei = offsetHei = doc.documentElement.offsetHeight;
if(doc.documentElement.scrollHeight) docHei = scrollHei = doc.documentElement.scrollHeight;
}
/*
docHei = Math.max(scrollHei,offsetHei);//取最大的值,某些情況下可能與實際頁面高度不符!
*/
return docHei;
}
function doReSize(){
var iframeWin = window.frames['Main'];
var iframeEl = window.document.getElementById? window.document.getElementById('Main'): document.all? document.all['Main']: null;
if ( iframeEl && iframeWin ){
var docHei = getDocHeight(iframeWin.document);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
else if(iframeEl){
var docHei = getDocHeight(iframeEl.contentDocument);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
}
function runResizeTask(){
doReSize();
setTimeout("runResizeTask()",1000);//每隔1秒執(zhí)行一次
}
runResizeTask();
</script>
1、首先給出個Iframe。
復(fù)制代碼 代碼如下:
<iframe id="ifrm"
marginheight="0"
marginwidth="0"
height="100"
width="1000"
frameborder="0"
scrolling="no"
src="xxxxx.html">
</iframe>
2、然后看看怎么獲取Iframe中的頁面的高度。
其實最麻煩的就是怎么讓獲取的高度準(zhǔn)確,不同的方式不同的瀏覽器中獲取到的值都會不一樣!暈啊~~。參考了多方意見得出以下javascript函數(shù)(doc參數(shù)為window.document對象):
復(fù)制代碼 代碼如下:
function getDocHeight(doc)
{
//在IE中doc.body.scrollHeight的可信度最高
//在Firefox中,doc.height就可以了
var docHei = 0;
var scrollHei;//scrollHeight
var offsetHei;//offsetHeight,包含了邊框的高度
if (doc.height)
{
//Firefox支持此屬性,IE不支持
docHei = doc.height;
}
else if (doc.body)
{
//在IE中,只有body.scrollHeight是與當(dāng)前頁面的高度一致的,
//其他的跳轉(zhuǎn)幾次后就會變的混亂,不知道是依照什么取的值!
//似乎跟包含它的窗口的大小變化有關(guān)
if(doc.body.offsetHeight) docHei = offsetHei = doc.body.offsetHeight;
if(doc.body.scrollHeight) docHei = scrollHei = doc.body.scrollHeight;
}
else if(doc.documentElement)
{
if(doc.documentElement.offsetHeight) docHei = offsetHei = doc.documentElement.offsetHeight;
if(doc.documentElement.scrollHeight) docHei = scrollHei = doc.documentElement.scrollHeight;
}
/*
docHei = Math.max(scrollHei,offsetHei);//取最大的值,某些情況下可能與實際頁面高度不符!
*/
return docHei;
}
3、最后修改Iframe的高度,并用一個定時器來不間斷檢查它包含的頁面的高度變化。
復(fù)制代碼 代碼如下:
function doReSize()
{
var iframeWin = window.frames['ifrm'];
var iframeEl = window.document.getElementById? window.document.getElementById('ifrm'): document.all? document.all['ifrm']: null;
if ( iframeEl && iframeWin )
{
var docHei = getDocHeight(iframeWin.document);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
else if(iframeEl)
{
var docHei = getDocHeight(iframeEl.contentDocument);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
}
function runResizeTask()
{
doReSize();
setTimeout("runResizeTask()",500);//每隔半秒執(zhí)行一次
}
runResizeTask();
在這里就沒有去考慮被包含的頁面中是否有折疊、隱藏/展現(xiàn)的情況了!
完整js代碼
復(fù)制代碼 代碼如下:
<script language="javascript" type="text/javascript">
function getDocHeight(doc){
//在IE中doc.body.scrollHeight的可信度最高
//在Firefox中,doc.height就可以了
var docHei = 0;
var scrollHei;//scrollHeight
var offsetHei;//offsetHeight,包含了邊框的高度
if (doc.height){
//Firefox支持此屬性,IE不支持
docHei = doc.height;
}
else if (doc.body){
//在IE中,只有body.scrollHeight是與當(dāng)前頁面的高度一致的,
//其他的跳轉(zhuǎn)幾次后就會變的混亂,不知道是依照什么取的值!
//似乎跟包含它的窗口的大小變化有關(guān)
if(doc.body.offsetHeight) docHei = offsetHei = doc.body.offsetHeight;
if(doc.body.scrollHeight) docHei = scrollHei = doc.body.scrollHeight;
}
else if(doc.documentElement){
if(doc.documentElement.offsetHeight) docHei = offsetHei = doc.documentElement.offsetHeight;
if(doc.documentElement.scrollHeight) docHei = scrollHei = doc.documentElement.scrollHeight;
}
/*
docHei = Math.max(scrollHei,offsetHei);//取最大的值,某些情況下可能與實際頁面高度不符!
*/
return docHei;
}
function doReSize(){
var iframeWin = window.frames['Main'];
var iframeEl = window.document.getElementById? window.document.getElementById('Main'): document.all? document.all['Main']: null;
if ( iframeEl && iframeWin ){
var docHei = getDocHeight(iframeWin.document);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
else if(iframeEl){
var docHei = getDocHeight(iframeEl.contentDocument);
if (docHei != iframeEl.style.height) iframeEl.style.height = docHei + 'px';
}
}
function runResizeTask(){
doReSize();
setTimeout("runResizeTask()",1000);//每隔1秒執(zhí)行一次
}
runResizeTask();
</script>
您可能感興趣的文章:
- 微信小程序中使用javascript 回調(diào)函數(shù)
- 微信小程序訪問node.js接口服務(wù)器搭建教程
- nodejs獲取微信小程序帶參數(shù)二維碼實現(xiàn)代碼
- 微信小程序 引用其他js文件實現(xiàn)代碼
- 微信小程序本作用域下調(diào)用全局JS詳解及實例
- 微信小程序 JS動態(tài)修改樣式的實現(xiàn)代碼
- 微信小程序通過api接口將json數(shù)據(jù)展現(xiàn)到小程序示例
- 使用javascript實現(xiàn)監(jiān)控視頻播放并打印日志
- Node.js中使用Log.io在瀏覽器中實時監(jiān)控日志(等同tail -f命令)
- js監(jiān)控IE火狐瀏覽器關(guān)閉、刷新、回退、前進(jìn)事件
- 監(jiān)控 url fragment變化的js代碼
- 監(jiān)控用戶是否關(guān)閉瀏覽器的js代碼
- JS實現(xiàn)監(jiān)控微信小程序的原理
相關(guān)文章
JavaScript中如何在一個循環(huán)中等待示例代碼詳解
這篇文章主要介紹了在JavaScript中如何在一個循環(huán)中等待(附代碼示例),下面是如何使用for..of 循環(huán)來迭代一個數(shù)組并在循環(huán)內(nèi)等待,需要的朋友可以參考下2022-08-08JavaScript判斷是否為數(shù)組的3種方法及效率比較
這篇文章主要介紹了JavaScript判斷是否為數(shù)組的3種方法及效率比較,本文直接給出運行效果和實現(xiàn)代碼,需要的朋友可以參考下2015-04-04JavaScript+HTML5實現(xiàn)的日期比較功能示例
這篇文章主要介紹了JavaScript+HTML5實現(xiàn)的日期比較功能,涉及javascript結(jié)合HTML5針對日期的轉(zhuǎn)換與運算相關(guān)操作技巧,需要的朋友可以參考下2017-07-07JavaScript使用原型和原型鏈實現(xiàn)對象繼承的方法詳解
這篇文章主要介紹了JavaScript使用原型和原型鏈實現(xiàn)對象繼承的方法,簡單講述了javascript原型與原型鏈的原理,并結(jié)合實例形式詳細(xì)分析了javascript中對象繼承的常見實現(xiàn)技巧,需要的朋友可以參考下2017-04-04JavaScript實現(xiàn)移動端帶transition動畫的輪播效果
這篇文章主要介紹了JavaScript原生實現(xiàn)帶transition動畫的自動+手動輪播效果,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03如何在JavaScript中實現(xiàn)私有屬性的寫類方式(一)
這篇文章主要介紹了如何在JavaScript中實現(xiàn)私有屬性的寫類方式。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12