我正在使用window.onload调用我的JavaScript代码,该代码必须在页面完全加载后执行。根据我的阅读,这是调用此类脚本的推荐方法。
但是,它不适用于某些Ajax站点,例如www.bing.com - 在完全呈现页面之前调用window.onload。
有什么建议吗?
答案 0 :(得分:3)
简短的回答是,目前还没有解决这个问题的通用方法。
当AJAX发挥作用时,“页面”的定义是非常可靠的 - 很难说出AJAX是初始页面加载的一部分,也可能不是。因此,浏览器会自行决定何时触发window.onload(),并且它并不总是在你想要的地方结束。
幸运的是,大多数人不需要通用解决方案,而是需要特定的解决方案。如果您关心bing.com,那么您可以查看bing.com如何工作并设计代码,以便在网站达到您认为可接受的状态时触发。
答案 1 :(得分:1)
您可以通过全局收听DOMSubtreeModified
和readystatechange
事件来侦听更改和请求,并将这些事件而不是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。
jQuery.fn.ajaxComplete
(http://api.jquery.com/ajaxcomplete/)jQuery.fn.ajaxStop
(http://api.jquery.com/ajaxstop/)请注意,这与本机onload事件无关。