Подтвердить что ты не робот

Как узнать, уже запущено ли событие $(window).load()/window.onload?

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

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

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

Любые идеи/решения/рекомендации будут очень признательны!

4b9b3361

Ответ 1

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

Ответ 3

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