iframe высота по содержимому

Иногда требуется разместить iframe на странице сайта содержащий раскрывающийся списки, слайдеры, т.е. высота фрейма может меняться. Но у iframe всегда фиксированная высота и появляются полосы прокрутки.

Чтобы это исправить достаточно добавить jQuery скрипт который будет отслеживать изменения в дереве DOM фрейма и плавно изменять его высоту.

Добрый день. Как известно iframe кушает лишь четкие указания height в px , а нужно что-бы вставляемый iframe растягивал родительский элемент, в зависимости от размера содержимого самого iframe , т.к. содержимое — динамическое. Кто знает какие решения, простые или сложные ( JS , JQ и т.д.)?

2 ответа 2

Скрипт вставлять в тот документ который загружается в iframe, не забудьте также подключить в этот файл jQuery (проверял на 1.6.2)

Работает, но если содержимое больше высоты монитора, то устанавливается высота которая видна, если бы я открыл этот Iframe в отдельном окне.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками html css iframe или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

Думаю, многие, кто сталкивался в своей работе с iframe, сталкивались и с задачей установки высоты этого самого айфрейма.

Это может быть необходимо, например, когда ты хочешь дать возможность пользователям ставить виджеты с вашего сайта на их сайт, и хочется, чтобы размер контейнера (iframe) виджета соответствовал размерам содержимого этого виджета.

В яндексе можно найти множество решений этой проблемы, но большинство из них обладают одной проблемой: они не поддерживают возможность менять размеры окна когда содержимое iframe и родительский элемент находятся на разных доменах.

Есть одно неплохое кросс-доменное решение, но оно было написано в 2007 году, а с тех пор многое изменилось. Поэтому пришлось разрабатывать решение этой проблемы самостоятельно, основываясь на приведенном решении.

Собственно, основное, что поменялось — это появился инструмент window.postMessage, который позволяет окнам браузера обмениваться сообщениями. Благодаря этому мы сможем сделать аналог приведенного решения, обладающий следующими преимуществами:

  • В новых браузерах не будет спама в hash (и заодно будет корректно работать хеш-навигация на клиентской странице)
  • корректная работа в webkit
  • более простой и понятный код

Наш код не должен зависеть от каких-то внешних факторов, и для его использования должно быть достаточно на стороне содержимого фрейма подключить 2 js файла (один для postMessage, а ворой — наш), а на стороне клиента — подключить также 2 js файла и добавить айфрейму два аттрибута — id и name (должны быть идентичны), а также на onload повесить регистрацию iframe.

Для работы с postmessage мы будем использовать следующую библиотеку:
postmessage.freebaseapps.com
Эта библиотека является очень удобной оберткой для window.postMessage, которая, кроме прочего, также позволяет пользоваться передачей данных через hash в браузерах, которые не поддерживают window.postMessage.

Логика работы скрипта предельно проста — на клиентской странице мы «регистрируем» iframe — отправляем дочерней странице (которая в iframe) идентификатор этого iframe и подписываемся на сообщения от дочерней страницы. При получении сообщения — изменяем размер.

На стороне дочерней страницы (которая в iframe) мы в свою очередь подписываемся на сообщения о регистрации, когда оно приходит — запоминаем идентификатор и включаем таймер, который при изменении размера содержимого фрейма отправляет родительской странице информацию о том, что нужно поменять размер iframe.

Собственно вот и все. Сам код скриптов:

FrameManager.js («клиентский» скрипт)

Frame.js (скрипт для содержимого фрейма)

И напишем 2 тестовых html-страницы:

В дочерней странице также можно расскомментировать участок кода с подключением jquery — тогда определение высоты будет более точным. Буду благодарен за нормальные кросс-браузерные функции для определения размеров страницы и окна, я использовал первые, которые нашел — они работают, но пикселей на 10 в вебките допускают погрешность.

Для меня это некритично, потому что у меня на стороне клиента (т.е. в дочерней странице) есть jquery, но у кого-то, возможно, его не будет — тогда код все равно сохранит работоспособность.

Оцените статью