jQuery .ready w dynamicznie wstawianej ramce iframe

184

Używamy jQuery thickbox, aby dynamicznie wyświetlać ramkę iframe, gdy ktoś kliknie zdjęcie. W tym iframe, używamy Galleria javascript biblioteki wyświetlanie wielu zdjęć.

Problemem wydaje się być to, że $(document).readyw ramce iframe wydaje się, że została uruchomiona zbyt wcześnie, a zawartość ramki iframe nie jest jeszcze ładowana, więc kod galerii nie jest poprawnie stosowany do elementów DOM. $(document).readyzdaje się używać stanu nadrzędnego elementu iframe, aby zdecydować, czy element iframe jest gotowy.

Jeśli wyodrębnimy funkcję wywoływaną przez dokument w osobnej funkcji i wywołamy ją po upływie 100 ms. Działa, ale nie możemy ryzykować produkcji przy wolnym komputerze.

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

Moje pytanie: które zdarzenie jQuery powinniśmy powiązać, aby móc wykonać nasz kod, gdy dynamiczny iframe jest gotowy, a nie tylko rodzicem?

EtienneT
źródło
1
I potwierdzasz, że galeria działa, gdy ładujesz ją bezpośrednio zamiast przez ramkę iframe, prawda?
Jason Kealey,
Tak, galeria działa idealnie, gdy używamy jej bezpośrednio na normalnej stronie.
EtienneT

Odpowiedzi:

291

Odpowiedziałem na podobne pytanie (patrz wywołanie zwrotne JavaScript, gdy IFRAME kończy ładowanie? ). Możesz uzyskać kontrolę nad zdarzeniem ładowania iframe za pomocą następującego kodu:

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

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

W przypadku ramek iframe uznałem, że wystarczy użyć zdarzenia load zamiast zdarzenia ready document.

Pier Luigi
źródło
17
Czy nie powinieneś ustawić zdarzenia load przed wywołaniem attr ('src')?
Shay Erlichmen,
15
Nie, to nie ma znaczenia. Zdarzenie ładowania nie będzie uruchamiane, dopóki przynajmniej następna pętla zdarzenia nie zostanie uruchomiona
Barum Rho
29
zdarzenie ładowania nie będzie działać dla ramek iframe używanych do pobierania. jak <iframe src = "my.pdf" />
Mike Starov
5
Problem z ładowaniem polega na tym, że uruchamia się po załadowaniu wszystkich obrazów i podramek. Przydałoby się zdarzenie typu jQuery ready.
Tom