★ IE6 怪事,不拖窗口也能onresize? 还是死循环! 高分请高手解答!

lxlnet 2008-12-26 02:19:22
我做了一个页面:其中的<iframe>大小随着所在index.html页面大小自动变化;
同时<iframe>内的sub.html的大小随iframe的大小自动变化。

测试的时候发现在IE6会出现死循环,代码如下:
index.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>主页</title>
<script type="text/javascript">
//拖动窗体触发事件
var resizeTimer = null;
window.onresize = function()
{
if(resizeTimer==null)
{
resizeTimer = setTimeout("doResize()",300); //控制调用方法的时间间隔
}
}
function doResize()
{
findDimensions('iframe',true);
resizeTimer=null;
}
//实时获取浏览器宽度和高度;
var winWidth = 0;
function findDimensions(iframeName,resize) //函数:获取尺寸
{
//获取窗口宽度
if (window.innerWidth) { winWidth = window.innerWidth; }
else if ((document.body) && (document.body.clientWidth)) { winWidth = document.body.clientWidth; }
//通过深入Document内部对body进行检测,获取窗口大小
if (document.documentElement && document.documentElement.clientWidth) { winWidth = document.documentElement.clientWidth; }
//拖动浏览器的时候,调用的调整iframe方法,参数(iframe ID ,浏览器宽度)
alert('onresize方法被调用 ');//
dyniframesize(iframeName,winWidth);
}

//此段代码用于动态设置ifream宽度
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
var FFextraWeight=getFFVersion>=0.1? 16 : 0
function dyniframesize(iframeName,winWidth)
{
var pTar = null;
if (document.getElementById) { pTar = document.getElementById(iframeName); }
else { eval('pTar = ' + iframeName + ';'); }
if (pTar && !window.opera)
{
pTar.style.display="block";
if (pTar.Document && pTar.Document.body.offsetWidth)
{
//这段代码动态设置winWidth
if(winWidth < pTar.Document.body.scrollWidth)
{
pTar.width = pTar.Document.body.scrollWidth + 50 ;
}
else
{
pTar.width='100%';
}
alert(pTar.Document.body.scrollWidth); //★如果注销此行,在ie6中将无限调用onresize方法。
}
}
}
</script>
</head>
<body>
<!-- ★如果去掉DIV标记,onresize方法也会执行,宽度重复+ 50px,但是只提示信息只显示1次或者2次。 注:内容需要DIV不能去掉 -->
<div>
<iframe id="iframe" frameborder="1" scrolling="no" width="100%" height="100%" src="sub.html" onload="findDimensions('iframe')" ></iframe>
</div>
</body>
</html>


sub.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>sub</title>

</head>
<body style="text-align: center">
<table border="3" width="800px" style="text-align: center">
<tr>
<td>
1</td>
<td>
2</td>
<td style="text-align: left">
3</td>
</tr>
</table>
</body>
</html>


sub页面只有一个居中的固定宽度的Table,可问题就出在这:

当我把index.html的宽度拖小,小于sub里面table的宽度800px的时候,怪事出现了:iframe的内容不停的加50px,也就是说程序进入死循环,(配置低的机器小心死机。)解开js最后一行代码的注释,不停的弹出警告。js方法都是onresize调用的,这种情况怎么解释呢?我没拖窗口,却不停的调用onresize???这应该是IE6的BUG吧,要不IE7怎么没事?如何解决,等高手赐教?


...全文
310 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudgamer 2008-12-26
  • 打赏
  • 举报
回复
var t=document.documentElement.clientWidth;
window.onresize = function()
{
if(t!=document.documentElement.clientWidth){
t=document.documentElement.clientWidth;
if(resizeTimer==null)
{
resizeTimer = setTimeout("doResize()",1000); //控制调用方法的时间间隔
}
}
}
Hechunwei211 2008-12-26
  • 打赏
  • 举报
回复
up!
lxlnet 2008-12-26
  • 打赏
  • 举报
回复
感谢 cloudgamer 解答,请来此领分。
lxlnet 2008-12-26
  • 打赏
  • 举报
回复
if(winWidth < pTar.Document.body.scrollWidth)
{
pTar.width = pTar.Document.body.scrollWidth + 50 ;
}

加50是为了测试,去掉+50,再去掉所有警告,进入死循环也不知道了
lxlnet 2008-12-26
  • 打赏
  • 举报
回复
iframe已经是100%了,如果不用js控制,index.html托小,iframe也变小,

那么iframe里面的内容就会被掩盖,我不想让sub.html的内容被掩盖到。

不要说加滚动条,我费这么大劲就是为了杜绝iframe滚动条。
tangserver 2008-12-26
  • 打赏
  • 举报
回复
为什么不设置100%
lxlnet 2008-12-26
  • 打赏
  • 举报
回复
注销掉 alert(pTar.Document.body.scrollWidth); 才能看到BUG效果。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧