Javascript - 如何检测文档是否已加载(IE 7/Firefox 3)

标签 javascript events onload addeventlistener

我想在文档加载后调用一个函数,但文档可能尚未完成加载,也可能尚未完成。如果它确实加载了,那么我可以调用该函数。如果它没有加载,那么我可以附加一个事件监听器。在 onload 已经触发后,我无法添加事件监听器,因为它不会被调用。那么如何检查文档是否已加载?我尝试了下面的代码,但它并不完全有效。有什么想法吗?

var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
    DoStuffFunction();
} else {
    // CODE BELOW WORKS
    if (window.addEventListener) {  
        window.addEventListener('load', DoStuffFunction, false);
    } else {
        window.attachEvent('onload', DoStuffFunction);
    }
}

最佳答案

不需要 galambalazs 提到的所有代码。在纯 JavaScript 中跨浏览器的方法是简单地测试 document.readyState:

if (document.readyState === "complete") { init(); }

这也是 jQuery 的做法。

根据 JavaScript 的加载位置,这可以在一个区间内完成:

var readyStateCheckInterval = setInterval(function() {
    if (document.readyState === "complete") {
        clearInterval(readyStateCheckInterval);
        init();
    }
}, 10);

其实document.readyState可以有三种状态:

Returns "loading" while the document is loading, "interactive" once it is finished parsing but still loading sub-resources, and "complete" once it has loaded. -- document.readyState at Mozilla Developer Network

因此,如果您只需要准备好 DOM,请检查 document.readyState === "interactive"。如果您需要准备好整个页面,包括图像,请检查 document.readyState === "complete"

关于Javascript - 如何检测文档是否已加载(IE 7/Firefox 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978740/

相关文章:

javascript - 如何同时单击一个按钮并激活2个按钮

javascript - 更改弹出窗口中使用的按钮类的数据内容

jquery - 为什么我的 transitionend 事件会立即触发?

javascript - 是否可以在JavaScript中捕获滚动条上的鼠标事件

javascript - 利用时刻舍入到下一个或第三个星期一

javascript - ExtJS 当查询执行时间超过超时时捕获事件

javascript - 有没有办法将 2 个或多个执行类似操作的事件组合起来以使用 DRY 原则

javascript - Onload-Event 在 Android 上不会停止

javascript - Tapestry 区域更新后,IE 中的 iFrame OnLoad 事件未触发

javascript - IE9 和 Iframe onload 事件