【问题标题】:window load function happening too soon窗口加载功能发生得太快
【发布时间】:2014-03-14 21:55:10
【问题描述】:

我正在尝试调用一个函数,该函数在窗口完成加载时根据其父元素的当前高度设置元素的高度。

但是,facebook 的评论 iframe 没有被考虑到...

$(window).load(function() {
    columnHeight();
});

当页面中存在 iframe 时如何处理 window.load 函数的任何想法?我想确保在 所有内容 完全加载后传递 columnHeight()。

问题示例:

复制步骤:

  • 转到上面的网址
  • 快速滚动到页面底部
  • 注意左侧边栏的大小与正文的高度相匹配
  • 观看 Facebook 评论系统加载并导致左侧栏不再与正文包装的高度匹配

【问题讨论】:

  • 为什么不直接使用 CSS 作为高度呢?是否有理由需要使用脚本来完成?
  • 高度永远不会是一个一致的值。它应该始终将自身调整到父高度(div#wrapper)。
  • 您可以尝试使用faux columns method。基本上是一个包含两个“列”背景的垂直重复图像,内容只是浮动在顶部以呈现列的外观。
  • $(window).load() 只等待页面的实际 HTML 中指定的内容完成加载。它不会等待可能由脚本或 ajax 调用加载的内容来加载。通过查看您的页面,该内容似乎是由 facebook 代码动态加载的。当 IT 完成内容加载后,您可能需要一个 Facebook 事件。

标签: javascript jquery iframe load


【解决方案1】:

$(window).load()等待页面HTML中直接指定的内容被加载。

它不等待加载 iframe。它不会等待可能由脚本或 ajax 调用创建或加载的内容完成。

您引用的页面中的 Facebook 内容似乎是由 Facebook 脚本动态加载的,因此如果您想准确了解加载的时间,您需要在 Facebook API 中找到一个 Facebook 事件,该事件会在加载完成时通知您。 Facebook 事件 API 在这里:https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

在我看来,这可能是您需要的,但您必须在页面中对其进行测试才能确定:

FB.Event.subscribe('xfbml.render', function() {
    // your code here
});

您可能还需要等到 Facebook API 本身被加载后才能调用它。

【讨论】:

  • Hrmp,我可以发誓 .load() 等到主窗口中的所有内容(包括其他窗口(iframe))在它被触发之前加载。如何在触发之前编写一些东西以等待所有 iframe 加载? (不是 JS 开发人员,所以请放轻松)。
  • @JoeyO'Driscoll - 查看您引用页面中的内容后重写了我的答案。
  • 第一次就成功了,不过好像有点喜怒无常。我将继续研究 FB 的 JavaScript 参考文档!谢谢!
【解决方案2】:

这可能是css特异性的问题

使用方法 css() + !important

【讨论】:

  • 两件事 (1) 我从来没有在 CSS 中使用 !important,因为我被教导这是坏习惯 (2) 将值设置为 !important 不会解决我遇到的问题。
猜你喜欢
  • 2021-10-18
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2015-08-21
  • 2015-08-16
相关资源
最近更新 更多