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