2

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

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

有什么建议么?

4

5 回答 5

3

简短的回答是没有通用的方法来解决这个问题(现在)。

当 AJAX 发挥作用时,“页面”的定义是相当可替代的 - 很难区分旨在作为初始页面加载一部分的 AJAX 与可能不是的 AJAX 之间的区别。因此,浏览器自行决定何时应该触发 window.onload(),并且它并不总是最终到达您想要的位置。

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

于 2009-11-07T21:00:54.793 回答
2

我已经为此苦苦挣扎了几次,我需要某种 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 ...
        //
    }
}
于 2009-11-08T03:58:06.080 回答
1

您可能能够通过全局侦听DOMSubtreeModifiedreadystatechange事件来侦听更改和请求,并使用这些事件而不是load事件来完成您尝试做的任何事情。

于 2009-11-07T23:49:07.863 回答
0

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

于 2009-11-07T20:43:05.877 回答
0

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

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

于 2015-03-09T15:42:00.723 回答