我正在使用 window.onload 来调用必须在页面完全加载后执行的JavaScript代码。根据我的阅读,这是调用此类脚本的推荐方法。
但是,它不适用于某些Ajax站点,例如 www.bing.com - 在页面完全呈现之前调用 window.onload。
有什么建议么?
我正在使用 window.onload 来调用必须在页面完全加载后执行的JavaScript代码。根据我的阅读,这是调用此类脚本的推荐方法。
但是,它不适用于某些Ajax站点,例如 www.bing.com - 在页面完全呈现之前调用 window.onload。
有什么建议么?
简短的回答是没有通用的方法来解决这个问题(现在)。
当 AJAX 发挥作用时,“页面”的定义是相当可替代的 - 很难区分旨在作为初始页面加载一部分的 AJAX 与可能不是的 AJAX 之间的区别。因此,浏览器自行决定何时应该触发 window.onload(),并且它并不总是最终到达您想要的位置。
幸运的是,大多数人不需要一个通用的解决方案,而是一个特定的解决方案。如果您关心 bing.com,那么您可能可以查看 bing.com 的工作原理,并设计您的代码以在站点达到您认为可以接受的状态时触发。
我已经为此苦苦挣扎了几次,我需要某种 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 ...
//
}
}
您可能能够通过全局侦听DOMSubtreeModified
和readystatechange
事件来侦听更改和请求,并使用这些事件而不是load
事件来完成您尝试做的任何事情。
我建议使用 jQuerys $(...).ready() 方法。
除了Rasmus Kaj 的回答之外,如果您使用的是 jQuery,我会指导您查看Global Ajax Event Handlers。
jQuery.fn.ajaxComplete
( http://api.jquery.com/ajaxcomplete/ )jQuery.fn.ajaxStop
( http://api.jquery.com/ajaxstop/ )请注意,这与本机 onload 事件无关。