Как определить, что событие $ (window) .load () / window.onload уже запущено? - PullRequest
12 голосов
/ 22 мая 2009

У меня есть скрипт, который динамически вставляется через другой скрипт. Код в этом сценарии заключен в событие $(window).load(), так как для этого требуются все изображения на странице для загрузки. В некоторых браузерах он работает нормально, но в других он не срабатывает, потому что к моменту запуска кода страница уже закончила загружаться.

Есть ли способ проверить и посмотреть, закончилась ли загрузка страницы - через jQuery или JavaScript? (включая изображения)

В этой ситуации у меня нет доступа к событию onload исходного документа (кроме изменения его с помощью загруженного скрипта - но это, похоже, создает ту же проблему).

Любые идеи / решения / советы будут с благодарностью!

Ответы [ 5 ]

7 голосов
/ 22 мая 2009

Вы можете попробовать настроить обработчик, который вызывается через тайм-аут, который проверит изображения, чтобы увидеть, доступны ли их свойства. Очистите таймер в обработчике событий 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
  }
5 голосов
/ 16 октября 2009

Я написал плагин, который может быть полезен: http://plugins.jquery.com/project/window-loaded

2 голосов
/ 29 июля 2010
2 голосов
/ 22 мая 2009

Я думаю, что ваша проблема разрешилась бы сама, если бы вы использовали $ (документ) .ready вместо $ (window) .load - см. Документацию jquery .

0 голосов
/ 22 мая 2009

Не знаю, за этим ли вы следите, но пытались ли вы (?):

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

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

...