为什么这段JS代码在Chrome和Safari中不能运行?

3

我的index.html页面上有一个动态的iframe。

在我的index.html页面上,我有一个表单,当提交时,结果会显示在iframe内。

问题是iframe的高度也必须是动态的,以使网站看起来“整洁”。

因此,在Iframes的php页面中,我有以下代码:

<body onload="parent.resize_iframe(document.body.scrollHeight)">

在这种情况下的index.html(也就是父级)中,我有以下函数:

function resize_iframe(new_height){
    byId('iframe001').style.height=parseInt(new_height) + 20 + 'px';
}

问题并不在于函数,而是Safari和Chrome认为scrollHeight比实际要大得多。我尝试了alert scrollHeight,在Chrome和Safari中,数字始终约为2000px,但在其他浏览器中,它就像应该的那样是动态的(500、300、800等)... 有什么想法吗?
更新:我注意到当我点击索引上的链接,然后点击浏览器的后退按钮时,iframe在Safari和Chrome中确实可以正确地调整大小。但我必须在浏览器中点击后退才能起作用...
请参见此问题以获取更多信息:Can't figure out why Chrome/Safari can't get the ScrollHeight right here

2
内联JavaScript属性已经过时了。 - Skilldrick
尝试编写:byId('iframe001').style.height=(parseInt(new_height) + 20) + 'px'; - Erhard Dinhobl
1
@Skilldrick:就我所知,<body onload="...">是调用页面加载函数的唯一标准化方式。 - Tim Down
@Tim:嗯...也许吧。我认为OnLoad="myStartupCode();"更好,因为这显然更容易维护。但是确实,他可能在参与库 snobbery。 - Hogan
@Hogan:我认为他想在 JavaScript 代码中使用 window.onload = ...,而不是在 HTML 中。 - Marcel Korpel
显示剩余3条评论
2个回答

0
有时候当页面存在验证错误时,JavaScript 的工作效果并不如预期。
首先尝试验证你的标记语言(HTML)。
如果验证无效,可以尝试使用 jQuery。
jQuery 兼容所有浏览器,你可以在每个浏览器上获得完全相同的结果。

0

我不太确定,但是我想说出我想说的话。Safari和Chrome都是基于Webkit的浏览器,所以这种行为很正常。因此,我猜测它们计算高度时会将填充和边距添加到普通高度中。请在Google上搜索“webkit calculated style”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接