关于window.onload事件何时被触发,我有点困惑.例如:我有一个页面,其中包含许多外部js文件,甚至是按需加载脚本(动态创建标记).所有这些代码都在页面中(即,它不会在click或smth上被触发,它应该在加载时执行).现在让我们说我在最后一个按需javascript中有window.onload = somefunction().是否有可能在实际加载所有脚本之前触发window.onload?
Aar*_*lla 23
window.onload
(aka body.onload
)在主HTML,所有CSS,所有图像和所有其他资源都已加载和渲染之后被触发.因此,如果您的图像停滞,可能需要一些时间.
如果您只需要HTML(DOM),则可以使用jQuery $(document).ready()
- 它将在解析HTML时触发,但在浏览器完成加载所有外部资源(HTML中脚本元素之后的图像和样式表)之前触发.
当浏览器解析</script>
每个脚本时,嵌入在页面中的脚本会被执行.因此,要在任何其他脚本之前执行脚本,请<script>
在标题之后添加标记<head>
.
这意味着您可以window.onload
通过添加<script>
标记作为最后一个元素来"模拟" <body>
.
号 的window.onload()时,所有的资源(文档,对象,图片,CSS等)已经完成渲染调用.
误读了这个问题.是的,完全有可能window.onload事件将在动态附加脚本完成下载之前触发.使用DOM(document.createElement())异步下载添加的脚本,并且不受window.onload()等待所有资源首先完成下载的通常规则的约束.
我为你设置了一个测试套件,http://jsfiddle.net/ywSMW/.此脚本动态地将jQuery脚本添加到DOM,并$
在onload处理程序期间将值写入控制台.然后它会在一秒钟之后再次写入该值.即使脚本被缓存,对控制台的第一次写入也会返回undefined,这意味着在下载和解析jQuery脚本之前,onload甚至已经被触发.
在IE和Chrome中测试过.
var windowHasLoaded = false;
window.onload = function () {
windowHasLoaded = true;
}
function doSomethingWhenWindowHasLoaded() {
if (!windowHasLoaded) {
// onload event hasn't fired yet, wait 100ms and check again
window.setTimeout(doSomethingWhenWindowHasLoaded, 100);
} else {
// onload event has already fired, so we can continue
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32411 次 |
最近记录: |