【问题标题】:Has window.onload fired yet?window.onload 已经触发了吗?
【发布时间】:2009-10-09 00:41:35
【问题描述】:

我有一个脚本将在未知时间插入到未知页面。是否可以从这个脚本中判断 window.onload 是否已经触发?

我无法控制主机页面。我不能向它添加任何标记或脚本。我只知道我的脚本会在某个时候插入到页面中。它可以在 window.onload 之前或之后;我需要检测我在该事件的哪一边。

【问题讨论】:

  • 我觉得“未知时间”部分很好奇。这是小书签吗?动态<script> 包含?不知道包含您自己的脚本的基本用例似乎很奇怪......
  • 这是一个动态脚本包含。我根本无法确定它是发生在 window.onload 之前还是之后。

标签: javascript domready


【解决方案1】:

更新答案: Look at this site. 他通过查看 document.getElementsByTagName("*") 的最后一个元素是否已定义来使用一个技巧。它似乎适用于 Opera 和 IE。


原答案: 你不能检查,但你可以做:

window.setTimeout(function () {
    // do your stuff
}, 0);

页面加载后,这肯定会完成您的工作。

【讨论】:

  • 这将在 Opera 中的 DOM 准备好之前运行该函数,并且在 IE 中可能会出错。 IE 问题见remysharp.com/demo/onload.php
  • 不错的发现。我想在洗衣房中运行该解决方案,看看效果如何。
  • 如答案中所述,我不知道 OP 问题的真正答案。但是,我的回答可能会对他的情况有所帮助,具体取决于window.onload 和 DOM 就绪之间的差异是否显着。
【解决方案2】:

jQuery 的ready() 将在文档加载时将要触发的函数排队,如果文档已经加载,则立即触发:

$(document).ready(function() {
    //your code here
});

请确保 jQuery 包含在您的脚本块之前。如果您不能直接包含任何脚本资源,您可以随时将jQuery-min 的正文复制到您的脚本中。

【讨论】:

  • 从 1.3.2 开始的 jQuery 无法检测文档是否被加载,如果它本身在文档加载后被包含(例如,书签、动态
  • jQuery 的 ready 函数似乎不起作用,除非它在 ​​window.onload 之前加载。
  • @Diet:正如我所提到的,它在 IE 中有效。无论如何,我从您的评论中得知,如果通过注入 DOM 的动态 <script> 标记包含您正在编写的代码需要工作?请澄清。
  • 好的,这是我所描述的错误报告:dev.jquery.com/ticket/4196 8 个月没有发生任何事情:(
  • 原始帖子询问的是 window.onload,而不是 DOM 就绪。 -1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多