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?


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.