2008-10-15 2 views
173

Мы используем jQuery thickbox для динамического отображения iframe, когда кто-то нажимает на изображение. В этом iframe мы используем galleria библиотеку javascript для отображения нескольких изображений.jQuery .ready в динамически вставленном iframe

Проблема в том, что $(document).ready в iframe, похоже, срабатывает слишком рано, а содержимое iframe еще не загружено, поэтому код шкалы не применяется должным образом к элементам DOM. $(document).ready, похоже, использует состояние готовности родителя iframe, чтобы решить, готов ли iframe.

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

$(document).ready(function() { setTimeout(ApplyGalleria, 100); }); 

Мой вопрос: какие JQuery события мы должны связываться, чтобы быть в состоянии выполнить наш код, когда динамический IFrame готов и не только это родитель?

+0

И вы подтверждаете, что GALLERIA работает, когда вы загружаете его непосредственно вместо через IFRAME, правильно? –

+0

Да, galleria отлично работает, когда мы используем его прямо на обычной странице. – EtienneT

+0

Возможный дубликат [Обратный вызов Javascript при завершении загрузки IFRAME?] (Http: // stackoverflow.com/questions/164085/javascript-callback-when-iframe-is-finished-loading) –

ответ

276

Я ответил на аналогичный вопрос (см. Javascript callback when IFRAME is finished loading?). Вы можете получить контроль над случае IFrame нагрузки со следующим кодом:

function callIframe(url, callback) { 
    $(document.body).append('<IFRAME id="myId" ...>'); 
    $('iframe#myId').attr('src', url); 

    $('iframe#myId').load(function() { 
     callback(this); 
    }); 
} 

В решении я нашел фреймы достаточно хорошо, чтобы использовать событие загрузки вместо документа готового событие.

+16

Разве вы не должны устанавливать событие загрузки до вызова attr ('src')? –

+15

Нет, это не имеет значения. Событие загрузки не срабатывает до следующего цикла событий. –

+27

событие загрузки не будет работать для iframes, которые используются для загрузки. например