Body.onload ждет IFrames? - PullRequest
       15

Body.onload ждет IFrames?

8 голосов
/ 05 июня 2009

Я знаю, что событие onload ожидает загрузки ресурсов страницы перед запуском - изображений, таблиц стилей и т. Д.

Но включает ли это IFrames внутри страницы? Другими словами, гарантируется ли, что все дочерние фреймы onload будут всегда срабатывать раньше, чем родительские?

Также, пожалуйста, дайте мне знать, если поведение браузеров различается.

Ответы [ 3 ]

7 голосов
/ 05 июня 2009

Нет, это не так. Если вы хотите сделать что-то подобное, вам нужно добавить обработчик загрузки для iframe. Вы можете сделать это красиво с JQuery:

  <iframe src="http://digg.com"></iframe>
  <script>
    var count = $('iframe').length;
    $(function() {
      // alert('loaded'); // will show you when the regular body loads
      $('iframe').load(function() {
        count--;
        if (count == 0)
            alert('all frames loaded');
      });
    });
  </script>

Это предупредит, когда все кадры загружены.

См. Пример:

http://jsbin.com/azilo

5 голосов
/ 30 декабря 2010

Или простой javascript должен работать ..

function checkIframes() {
   if(!i) { i = 0; }
   if(document.getElementsByTagName('iframe')[i]) {
      document.getElementsByTagName('iframe')[i].onload = function () { i++; checkIframes(); }
   }
   else { yourFunctionInHere(); }
}

на самом деле не проверял это, но должно работать ... чем ссылаться на него с document.onload = function() { checkIframes(); }

Мне не очень нравятся библиотеки, такие как jQuery, потому что я обнаружил, что могу достичь большего с меньшим количеством кода, с помощью обычного JavaScript.

3 голосов
/ 05 июня 2009

Как я вижу на своих страницах, каждый iframe получил независимую загрузку, и загрузка верхнего кадра не ожидает срабатывания iframe.

На моем сайте появились баннеры gif / png, которые иногда загружаются очень медленно, поэтому я поместил их в iframe, благодаря чему весь сайт и событие onload работали быстрее.

...