nazarpc
@nazarpc
Open Source enthusiast

Как повесить событие на onload/onresize iframe'a?

Есть такой jQuery плагин CSS Template Layout Module Implementation, он давно не обновлялся, и я решил его подпилить. Добавил поддержку разной высоты ячеек в строке, правильного подсчёта отступов, в том числе учитывая box-sizing: border-box, и т.д. Не проверял, соответствует ли это текущей спецификации W3C, но мне была нужна именно такая функциональность. В процессе работы производится подсчёт высоты элементов.

Но вот когда на странице есть TinyMCE, во время его инициализации текстовые поля заменяются на элементы большей высоты и верстка внизу страницы ломается. Хотел перехватить событие создания инстансов редактора так:
$('iframe').live('load', function () {/**/});

Пробовал и другие подобные варианты с $.on(), $.bind(), $.load(), $.delegate() — ничего не получается ни в одном из случаев, событие не возникает. Лезть в TinyMCE не хотелось бы, потому как решение должно быть как можно более универсальным, и работать с любыми другими редакторами подобного типа.

По событию будет производиться пересчёт высоты элементов.

Как ещё можно перехватить эти события, при том, что на момент работы плагина iframe'ы не существуют?

jQuery 1.8.1
  • Вопрос задан
  • 9785 просмотров
Решения вопроса 1
Nodge
@Nodge
Можно попробовать как-то так:
// редактор создает фрейм
var frame = document.createElement('iframe');
$(document.body).append(frame);

// отлавливаем фреймы
$('iframe').each(function() {
    $(this.contentWindow.document).ready(function() {
        console.log('frame ready');
    });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Nesvet
@Nesvet
Разработчик
Можно в iframe подключить скрипт, в котором $(function () { ... }), который будет выполнять функцию, объявленную в родительском документе, через window.top.myFunction()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы