javascript - 无法弄清楚为什么 Chrome/Safari 无法在此处获取 ScrollHeight

标签 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 发送到调整大小函数之前 body 没有完全加载?

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

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

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

谢谢

最佳答案

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

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

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

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

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

另一种选择(正如尖锐的嗯..指出的那样)是您可以在包含所有内容的正文之后创建一个包装器 div。然后你可以得到那个 div 的高度并将它返回给你的父函数

关于这个问题:

Is there any way of making it wait until the document is fully loaded?

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

关于javascript - 无法弄清楚为什么 Chrome/Safari 无法在此处获取 ScrollHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3849643/

相关文章:

jquery - 使用jquery计算一些表单字段

google-chrome - Chrome 动画期间损坏的标记 (jsfiddle)

javascript - 用于检查输入是否有任何值的 jQuery 脚本。 IE 和 Chrome 中的问题

javascript - 人们如何看待 JavaScript 中的对象以找出它是什么?

javascript - D3.js 可折叠树 : Adding a label for each level

javascript - CKEditor 5 缺少可用的工具栏项目

javascript - Datepicker getDate 方法在第二次单击时起作用并显示先前选择的日期

html - 网站在 mozilla firefox 和 chrome 中看起来不同

Javascript 文件到 Blob

javascript - Angular 在我的 route 没有调用解析