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

时间:2009-05-22 01:51:55

标签: javascript jquery onload

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

有没有办法检查并查看页面是否已经完成加载 - 通过jQuery还是JavaScript? (包括图片)

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

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

5 个答案:

答案 0 :(得分:7)

您可以尝试设置一个通过超时调用的处理程序,该处理程序将检查图像以查看其属性是否可用。清除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
  }

答案 1 :(得分:5)

我写了一个可能有用的插件:http://plugins.jquery.com/project/window-loaded

答案 2 :(得分:2)

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

答案 3 :(得分:2)

答案 4 :(得分:0)

不知道这是不是你想要的,但你试过(?):

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

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