2014-01-29 7 views
0

Сегодня я столкнулся с проблемой, которая слегка волнует меня. Я пишу расширение Chrome для конкретного веб-приложения. Веб-страница представляет собой (обертку) iframe, внутри реальной страницы можно найти, но внутри этого iframes есть еще больше iframe.JQuery - подождите, пока вложенный iFrame закончит загрузку

Чтобы определить, где я нахожусь в приложении, мне нужно прочитать некоторые данные, которые являются двумя глубинами iframe. Я нашел способ, чтобы получить строку, я ищу со следующим:

document.getElementById("firstiframe").contentWindow.document.getElementById("secondiframe").contentWindow.document.getElementById("theelement").innerText; 

Здесь проблема в том, как это запускается на выполнение всех необходимых кадры должны существовать. Поскольку secondiframe загружен после выполнения сценария, он не работает на getElementById("secondiframe"), поскольку он еще не существует.

Мне показалось, что мне нужно терпеливо дождаться загрузки второго iframe до тех пор, пока я не выполнит поиск. Здесь я не могу прийти дальше первого iframe.

$('#firstiframe').load(function() { 
    $('#secondiframe').load(function() { 
     console.log("We made it!"); 
    }); 
}); 

Это не сработало, кто-то предложил мне искать что-то вроде этого:

$('#firstiframe').load(function() { 
    $(this).contents().find('#secondiframe').load(function() { 
     console.log("We made it!"); 
    }); 
}); 

Но это было ни успеха, он никогда не проходит/не совпадает с secondiframe.

Заранее благодарен!

ответ

0

Вы сказали, что второй iframe не существует, когда вы загружаете первый. Делегированный обработчик позаботится об этом.

$('divAroundBothIframes').on('load', '#secondiframe', function() { 
    console.log("We made it!");  
}); 

Или что-то вокруг этой линии, скрипка вокруг.

http://api.jquery.com/on/

+0

Этот номер все еще не работает, он не проходит вообще. Разве я не могу заставить его работать с чем-то вроде этого? '$ ('# firstframe'). contentWindow.document.GetElementById ('secondiframe'). load' – user3249751

+0

@ user3249751 Хм, что именно вы имеете в виду:« не проходит вообще »? Проверьте мой отредактированный ответ без jsFiddle или что-то, что было бы громоздким, чтобы это произошло. Вы можете смешать jQuery и ванильный Javascript, да, но это не повлияло бы на вашу проблему, что объект, который вы хотите передать обработчику, отсутствует при передаче этого обработчика, вы понимаете? – loveNoHate

0

В таком роде сценарии, что я делаю, это написать функцию в родительской странице и включают OnLoad от содержания фрейма. Вы можете вызвать функцию в родительском окне, используя parent.functionName();

В вашем случае, я предлагаю, чтобы переменные указывали, если загружаются фреймы. Что-то вроде isIFrame1Loaded и isIFrame2Loaded. Они должны обновляться функциями onLoad, которые запускаются изнутри iframe. Они также должны проверить, установлены ли все переменные, и если да, выполните свой код.

Смежные вопросы