[JavaScript plug-in]iframe autoHeight

  • 14808
  • 0
  • 2012-03-22

[JavaScript plug-in]iframe autoHeight

前言

系統有一個需求,是要達到類似frame的效果,但是要用iframe來置放。

然而為了讓UI畫面不會太突兀,所以iframe應該要無框線,高度應該要跟原網頁的Scope一樣。
但只設定iframe的height是無法解決這問題的,所以要透過javascript去處理。

網路上當然也有前輩已經碰過這樣的需求,所以請member (感謝Cindy跟J妹) 去survey了一下,
有個不錯的解決方式,也提供給各位參考:
jQuery : Auto iFrame Height

使用方式

  1. include autoHeight.js
  2. 將iframe的class設定為autoHeight


只有這樣,就搞定了。

最後順便附上該JavaScript的內容:


function doIframe(){
	o = document.getElementsByTagName('iframe');
	for(i=0;i<o.length;i++){
		if (/\bautoHeight\b/.test(o[i].className)){
			setHeight(o[i]);
			addEvent(o[i],'load', doIframe);
		}
	}
}

function setHeight(e){
	if(e.contentDocument){
		e.height = e.contentDocument.body.offsetHeight + 35;
	} else {
		e.height = e.contentWindow.document.body.scrollHeight;
	}
}

function addEvent(obj, evType, fn){
	if(obj.addEventListener)
	{
        obj.detachEvent('on' + evType, fn);
	obj.addEventListener(evType, fn,false);
	return true;
	} else if (obj.attachEvent){
	var r = obj.attachEvent("on"+evType, fn);
	return r;
	} else {
	return false;
	}
}

if (document.getElementById && document.createTextNode){
 addEvent(window,'load', doIframe);	
}

 

[註]2010/9/9:原本的JavaScript會有performance的問題,原因是只有attachEvent,沒有detachEvent。會導致iframe中跑越多次,網頁越來越慢...已經將正確版本的JavaScript修改至內文中了,如果有使用此plug-in的朋友,記得修正一下。


blog 與課程更新內容,請前往新站位置:http://tdd.best/