2014-09-01 94 views
0

在javascript中,我们需要在运行代码之前等待窗口onload事件?为什么要等待window.onload?

什么有用的事情可以做,而无需等待?

+1

你的意思是不是'DOMReady',或者一般? – 2014-09-01 12:36:49

+0

如果你的脚本是BEFORE HTML,那么你必须等待它加载(否则你会尝试访问不存在的东西)。如果它是在标记之后,那么你可能需要仅等待异步上下文(比如图像),因为它们会参与布局。最后,DOM已经准备就绪并且只有在它已经被解析时才可用(但是当它已经准备就绪时,你可以在onload之前使用它)。 – 2014-09-01 12:38:11

+0

@FrédéricHamidi - 我的意思是一般 – 2014-09-01 12:39:42

回答

3

在JavaScript中的哪些情况下,我们是否需要在运行代码之前等待窗口onload事件?

  • 如果您要访问的节点在#document
  • 如果你想要得到的值,如
  • 如果你想避免竞争条件附加在页面的高度或宽度新事物的#document
  • 基本上,一切DOM相关特定页面

什么有用的事情可以做,而无需等待?

  • 计算行动
  • 声明功能,初始化变量
  • 测试功能的支持,其中包括polyfills
  • 基本上,一切非DOM相关,或DOM涉及到具体的浏览器,但不是页面
1

从一个相关的SO帖子:window.onload vs. body.onload vs. document.onready

window.onload会等待,直到所有资产都完成下载,如图像和脚本。

还有一个“DOM ready”事件,允许更快地访问dom,因为它只会等到您可以通过API访问DOM。

0

如果您的代码需要执行其他文件(如库,框架或公开全局的文件),您应该始终等待浏览器完成下载所有内容。

所以在大多数情况下,你应该这样做。你可以找到不需要这种边缘的情况,但这非常罕见,并且在人们对时间的感知中花费不多。

1

当代码需要访问/修改DOM和所有资源(图像,字体等)时,需要在运行代码之前使用window onload事件。您也可以使用jQuery(或同等版本)&(document).ready()。它比window onload早启动,因此用户会觉得网站加载速度更快。不同之处在于文档准备好只有DOM树已准备好,但资产可能尚未加载。在窗口onload上,一切已经加载。

在文档准备好之前,您可能还会做一些事情。例如,如果您需要为用户创建某种唯一的ID并设置cookie,则无需等待DOM。或者如果你想基于cookie做一些事情(只要它不接触DOM)。或者您需要从API加载一些外部数据(但您需要等待DOM才能显示该数据)。一般来说,任何不接触DOM的东西都可以。