window.onload等效于Ajax应用程序?

时间:2009-11-07 20:40:10

标签: javascript ajax onload

我正在使用window.onload调用我的JavaScript代码,该代码必须在页面完全加载后执行。根据我的阅读,这是调用此类脚本的推荐方法。

但是,它不适用于某些Ajax站点,例如www.bing.com - 在完全呈现页面之前调用window.onload。

有什么建议吗?

5 个答案:

答案 0 :(得分:3)

简短的回答是,目前还没有解决这个问题的通用方法。

当AJAX发挥作用时,“页面”的定义是非常可靠的 - 很难说出AJAX是初始页面加载的一部分,也可能不是。因此,浏览器会自行决定何时触发window.onload(),并且它并不总是在你想要的地方结束。

幸运的是,大多数人不需要通用解决方案,而是需要特定的解决方案。如果您关心bing.com,那么您可以查看bing.com如何工作并设计代码,以便在网站达到您认为可接受的状态时触发。

答案 1 :(得分:1)

您可以通过全局收听DOMSubtreeModifiedreadystatechange事件来侦听更改和请求,并将这些事件而不是load事件用于您尝试执行的操作

答案 2 :(得分:1)

我已经和它搏斗了几次,我需要某种onload事件触发的通常原因是能够与HTML DOM进行交互并拥有getElementById,getElementsByTagName或其他各种DOM选择器,返回一些东西除了什么都没有。

再一次,我不确定你要解决的确切问题,但是如果你必须使用某种onload,并且这是因为某种类型的DOM遍历,你可以用以下代码作弊:

window.onload = pageChecker;

function pageChecker() {
    // Onload has fired, but we don't trust it.
    // Check to see if our deepest nested element can be found
    var testElement = document.getElementById("importantElement");

    if ( !testElement ) {
        // Try again in a bit, adjust timeout to what your users
        // can tolerate
        setTimeout(pageChecker, 50);
    }
    else {
        //
        // ... the element exists, run important code below ...
        //
    }
}

答案 3 :(得分:0)

我建议使用jQuery $(...)。ready()方法。

答案 4 :(得分:0)

除了answer from Rasmus Kaj之外,如果您使用的是jQuery,我会指导您查看Global Ajax Event Handlers

请注意,这与本机onload事件无关。