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

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

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

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

  

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

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

为什么是这样? 有人认为,在将scrollHeight发送到resize函数之前,主体没有完全加载吗?

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

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

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

谢谢

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/