3

有一段时间,我一直在通过等待“onload”事件触发并执行main()各种操作来运行 JavaScript 组件初始化。它看起来更干净,你可以确定你的 DOM 的 ID 状态是有序的。但是经过一段时间的尝试后,我发现组件的初始化被加载期间挂起的任何类型的资源(图像、css、iframe、flash 等)阻塞。

现在,我使用内联执行将初始化调用移动到 HTML 文档本身的末尾,<script />并发现它将初始化推送到其他外部资源之前。

现在我想知道这样做是否会带来一些陷阱,而不是等待“onload”。

您使用哪种方法?

编辑:谢谢。似乎每个库都有针对DOMContentLoaded/readyState实现差异的专门功能。我使用原型,所以就是我需要的。

4

5 回答 5

4

对我来说,我们使用 jquery,它的文档就绪状态确保 DOM 已加载,但不会像你说的那样等待资源。您当然可以在没有 javascript 框架的情况下执行此操作,它确实需要一个您可以创建的函数,例如:文档准备好 现在,在大多数情况下,将脚本放在页面末尾确保页面的其余部分在那里,但是制作确保 DOM 准备就绪从来都不是一件坏事。

于 2009-04-03T16:41:40.637 回答
2

Jquery 有 $(document).ready()

运行大多数脚本的理想时间是文档准备好时,而不一定是“加载”时。

看这里

于 2009-04-03T16:40:23.900 回答
1

我都不用。相反,我依赖于YUI 的 onDomReady()(或 onContentReady()/onAvailable()),因为它为我处理初始化时间。

(其他 JS 库也有类似的方法,只在页面完全加载后才执行,因为这是一个常见的 JS 问题。)

于 2009-04-03T16:41:31.183 回答
1

这不符合任何 (X)HTML 规范,建议不要这样做。它会将您的网站置于浏览器的怪癖模式。

于 2009-04-03T16:42:02.150 回答
1

解决此问题的正确方法是使用DOMContentLoaded事件,并非所有浏览器都支持该事件。存在黑客(例如轮询doScroll()或使用onreadystatechange),因此库能够跨浏览器提供此功能。

但是仍然存在DOMContentLoaded流行的 JavaScript 框架尚未解决的分块传输问题。

这是我对这个问题的看法。

于 2009-04-03T22:11:21.937 回答