JQuery - дождитесь загрузки двух фреймов

У меня есть кнопка, которая загружает две разные страницы в двух фреймах. Мне нужно дождаться завершения этих загрузок (например, ready(), не заботиться об изображениях и другом содержимом), а затем запустить другое действие. Как я могу это сделать?

3 ответа

Решение

Один из способов заключается в том, чтобы контент iFrame сигнализировал о готовности. Вот упрощенный способ сделать это:

Главная страница

var status = [false, false];

function doneLoading(index)
{
   status[index] = true;
   if (status[1] && status[2])
      alert("Both iframes are done loading");
}

В каждом кадре

$(document).ready(function() { parent.doneLoading(1) }); // or 2

Использование $.when() поможет вам (jQuery 1.5 и выше). Например:

function doAjax(){
   return $.get('foo.htm');
}

function doMoreAjax(){
   return $.get('bar.htm');
}

$.when( doAjax(), doMoreAjax() )
   .then(function(){
      console.log( 'I fire once BOTH ajax requests have completed!' );
   })
   .fail(function(){
      console.log( 'I fire if one or more requests failed.' );
   });

На мой взгляд, самым безопасным решением может быть наличие родительского iframe, который будет встраивать оба iframe и ждать загрузки всей страницы (родительской страницы):

$(parent).load(function(){
   ... //if you get there then the 2 iframes are already loaded
}

Недостатком является то, что это много iframes

Другие вопросы по тегам