javascriptjqueryiframethickboxgalleria

jQuery .ready in a dynamically inserted iframe


We are using jQuery thickbox to dynamically display an iframe when someone clicks on a picture. In this iframe, we are using galleria a javascript library to display multiple pictures.

The problem seems to be that $(document).ready in the iframe seems to be fired too soon and the iframe content isn't even loaded yet, so galleria code is not applied properly on the DOM elements. $(document).ready seems to use the iframe parent ready state to decide if the iframe is ready.

If we extract the function called by document ready in a separate function and call it after a timeout of 100 ms. It works, but we can't take the chance in production with a slow computer.

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

My question: which jQuery event should we bind to to be able to execute our code when the dynamic iframe is ready and not just it's a parent?


Solution

  • I answered a similar question (see Javascript callback when IFRAME is finished loading?). You can obtain control over the iframe load event with the following code:

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

    In dealing with iframes I found good enough to use load event instead of document ready event.