Сделать document.ready с учетом элементов из внешнего iframe

Положение, в котором я нахожусь, заключается в следующем. У меня есть плагин JQuery, который должен быть вложен в document.ready функция. Этот плагин применяет некоторые стили к элементам страницы. Один из элементов этого плагина содержит iframe. Этот iframe не с моего сайта. Проблема в том, что document.ready не принимает во внимание содержимое iframe, а когда он загружается, его высота меняется, но плагин jQuery уже применялся до этого, поэтому макет страницы облажался.

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

$(document).ready(function() {
    $('#frameId').ready(function() {
    //plugin code
    });
});

Но это не работает, и я ищу другое решение.

2 ответа

Решение

Только документ имеет ready() событие, для iFrame это будет onload:

$(document).ready(function() {
    $('#frameId').on('load', function() {
    //plugin code
    });
});

Но почему вашему плагину требуется доступ к iFrame?

Решение $.holdReady();

$.holdReady(true);
$(document).ready(function() {
    //plugin code
});

$('#frameId').on('load', function() {
   $.holdReady(false);
});

Для доступа к высоте междоменного содержимого iFrame вам понадобится postMessage. Проверьте этот пост

Другие вопросы по тегам