做法
1,定义一数组。
2,window.onresize时,将操作函数压入数组,并设置setTimeout回调。
3,回调里面判断是否到数组0元素,即并pop到最后一个元素,并判断不等于undefined时则执行函数。否则返回。
另附有一查找函数,用于对iframe指定标签的父元素进行查找,除了将iframe设置高度外,还将父元素的高度一并设置。(此步可选)
PS:
对iframe中的文档检查高度时使用 scrollHeight 属性,且要检查 iframe.contentDocument 和 iframe.contentWindow 哪个存在。contentDocument 应该是对应标准的DOM,contentWindow在旧的IE模式下使用(兼容模式)。
window.resizeStack = [];
function onresizing() {
window.resizeStack.push(app.doResize);
setTimeout("checkResizeStack();", 500);
}
window.onresize = onresizing;
var app = { win: window,
doResize: function() {
var frm = document.getElementById("launchFrame");
var frmParent = wrapParent(frm, "table");
if (frm.contentDocument && frm.contentDocument.body.scrollHeight) {
var h = frm.contentDocument.body.scrollHeight;
frm.style.pixelHeight = Number(h) + 100;
frmParent.style.pixelHeight = Number(h) + 100;
} else if (frm.contentWindow && frm.contentWindow.document) {
var h2 = frm.contentWindow.document.body.scrollHeight;
frm.style.pixelHeight = Number(h2) + 100;
frmParent.style.pixelHeight = Number(h2) + 100;
}
}
}
function checkResizeStack() {
var f = window.resizeStack.pop();
if (window.resizeStack.length > 0) {
setTimeout(checkResizeStack, 500);
} else {
if (f != undefined) {
f();
}
}
}
function wrapParent(obj, tagName) {
var p
if (obj.parentNode != undefined) {
p = obj.parentNode;
while (true) {
if (p.tagName != undefined && (p.tagName.toLowerCase() == tagName)) {
p = p;
break;
}
if (p.parentNode != undefined) {
p = p.parentNode;
}
else {
p = obj;
break;
}
}
}
return p;
}