如何判断$(window).load()/ window.onload事件是否已经被触发?

问题描述:

我有一个正在通过另一个脚本动态插入的脚本。该脚本中的代码被封装在$(window).load()事件中,因为它要求页面上的图像全部加载。在某些浏览器中,它可以正常工作,但在其他浏览器中,它似乎不会触发,因为页面在代码运行时已经完成加载。

有什么办法检查页面是否已经完成加载 - 无论是通过jQuery或JavaScript? (包括图像)

在这种情况下,我无法访问原始文档的onload事件(除了通过加载的脚本更改它 - 但这似乎表现出同样的问题)。

任何想法/解决方案/建议将不胜感激!

你可以尝试建立是威盛的超时将调用的处理程序检查图像以查看它们的属性是否可用。清除load事件处理程序中的计时器,因此如果首先发生加载事件,则计时器不会触发。如果这些属性不可用,那么load事件还没有被触发,并且您知道您的处理程序最终会被调用。如果他们是,那么你知道负载事件发生在你的处理程序被设置之前,你可以简单地继续。

var timer = null; 
$(function() { 
    $(window).load(function() { 
     if (timer) { 
      clearTimeout(timer); 
      timer = null; 
     } 
     process(); 
    }); 
    timer = setTimeout(function() { 
     if (checkAvailable()) 
      process(); 
     } 
    }, 10*1000); // waits 10 seconds before checking 
}); 

function checkAvailable() 
{ 
    var available = true; 
    $('img').each(function() { 
     try { 
      if (this.height == 0) { 
       available = false; 
       return false; 
      } 
     } 
     catch (e) { 
      available = false; 
      return false; 
     } 
     }); 
     return available; 
    } 

    function process() { 
     ... do the real work here 
    } 

我认为如果您使用$(document).ready而不是$(window).load来解决问题,请参阅jquery documentation

+0

距离链接的文档片段: 简而言之,这是使用window.onload的可靠替代品...您的绑定函数将被称为即时e DOM准备好被读取和操作,这是所有JavaScript代码需要运行的99.99%。 – TML 2009-05-22 01:59:16

+5

$(document).ready如果DOM就绪,但不等待图像完成加载(如果我没有弄错),则会触发。在这种情况下,我需要加载图像以便我可以读取它们的属性。 – DismissedAsDrone 2009-05-22 02:07:43

+1

你可以阅读没有图像加载的属性... – trusktr 2011-05-17 05:44:52

不知道如果这是你所追求的,但你有没有试过(?):

$(document).ready(function(){ 
    ... 
}); 

http://docs.jquery.com/Events/ready#fn

我写的,可能是一些使用的插件:http://plugins.jquery.com/project/window-loaded