无法弄清楚为什么Chrome / Safari无法在这里获得ScrollHeight

时间:2010-10-03 12:04:59

标签: javascript jquery google-chrome safari webkit

我刚问了一个问题,为什么某个js代码无法在Chrome和Safari 100%中运行,但经过更多的故障排除后,我想我发现这是我应该发布的问题。

我有一个页面,里面有一个表格。此表单的目标是同一页面上的iframe。 iframe是动态的,基于php。

这是我的php iframe内容的底部:

<body onload="parent.resize_iframe(document.body.scrollHeight)">
<?php echo $display_table; ?>

如您所见,我调用一个函数来调整主页面(父页面)中iframe的高度。

这样可以正常工作,事实上它实际上已经调整大小,但是在Chrome和Safari中,调整大小设置的高度应该高于应有的高度。因此,如果高度为500px,则Chrome和Safari将其设置为大约2000px,这是iframe文档高度的最大值。

这是为什么?一个想法可能是在将scrollHeight发送到调整大小函数之前,主体没有完全加载?

有没有办法让它等到文档完全加载?

让我感到困惑的一件事是,当我点击主页上的链接,然后回击时,页面调整大小效果很好,并且设置为500px,因为它应该在Chrome / Safari中。但那是我在浏览器中“回”的时候。

嗯,我真的不明白这一点,所以请在这里帮助我。

由于

1 个答案:

答案 0 :(得分:1)

document.body.scrollHeight将始终返回chrome中的两个值之一:

如果文档内容比窗口的高度长,则返回内容的高度

如果文档比窗口的高度短,则返回窗口的高度。

听起来很像你在iframe上设置了一个高度。当iframe中的内容加载时,它会将iframe视为窗口。因此,如果iframe的高度设置为2000且内容的高度仅为500,则chrome将返回2000的偏移高度。

如果是这种情况,最简单的方法是将iframe的高度设置为1px。 (或自动)

另一个选项(如指针um..points out)是你可以在包含所有内容的正文之后创建一个包装div。然后,您可以获得该div的高度并将其返回到您的父函数

关于这个问题:

  

有没有办法让它等待   直到文档满载?

答案是肯定的,你已经这样做了。由于您在onload上调用parent.resize_iframe,因此在屏幕上加载所有HTML,JS,CSS和图像之前,不会调用该函数。但是应该指出使用body标签onload函数有一些缺点。一,是否必须在调用onload之前加载所有图像。其次,如果有人重新绑定到window.onload,你的函数永远不会被调用。如果您有兴趣了解onload及其处理方法,请查看此链接http://www.webreference.com/programming/javascript/onloads/