JavaScript выполнить после рендеринга страницы IE6 - PullRequest
0 голосов
/ 25 января 2010

У меня проблемы с некоторым JavaScript, выполняющимся до того, как страница полностью отобразится в IE 6 (возможно, и в других версиях, но пока просто тестирую IE6. Firefox вроде бы в порядке). Я могу обойти это, позвонив js на window.onload так:

window.onload = function(){doIt();}

Тем не менее, меня беспокоит тот факт, что я перезапишу все, что уже может быть в window.onload. Код будет использоваться как часть библиотеки, поэтому я не могу гарантировать, что window.onload не будет установлен кем-то еще. Я бы предпочел добавить свою функцию к событию onload следующим образом:

window.onload += function(){doIt1();}
window.onload += function(){doIt2();}

Но когда я это делаю, вызывается только doit2(). Есть ли способ зарегистрировать обработчик событий, когда страница полностью отображается? Второй мыслью было бы просто поместить мой код в цикл проверки, чтобы убедиться, что все мои объекты существуют перед запуском. Но я боюсь, что это может заблокировать браузер.

Просто для справки, мой код скрывает / показывает iFrames. Я знаю, что могу использовать атрибут onload iFrame, но мне нужно, чтобы все iFrame были полностью загружены перед вызовом кода.

Есть мысли от сообщества? Заранее спасибо за ваш вклад.

1 Ответ

6 голосов
/ 25 января 2010

Используйте эту общую функцию addLoadEvent ...

function addLoadEvent(func) {
  if(typeof window.onload != 'function')
    window.onload = func;
  else {
    var oldLoad = window.onload;

    window.onload = function() {
      if(oldLoad) oldLoad();
      func();
    }
  }
}

По существу это ставит в очередь функции, которые должны быть выполнены. Он никогда не перезаписывает ранее назначенный обработчик. Пример использования ниже ...

addLoadEvent(function() { alert("One!"); });

addLoadEvent(two);
function two() {
  alert("Two!");
}

Хочу отметить, что такие библиотеки, как jQuery , позаботятся об известных вам подобных проблемах.

...