Мне нужно решение для автоматической регулировкиwidth
и height
Ан iframe
едва соответствовать его содержанию. Дело в том, что ширина и высота могут быть изменены после iframe
загрузки. Я предполагаю, что мне нужно действие события, чтобы справиться с изменением размеров тела, содержащегося в iframe.
javascript
html
iframe
adjustment
Каменное сердце
источник
источник
Ответы:
источник
DOMContentLoaded
, такDOMContentReady
как, кажется, не вещь: developer.mozilla.org/en-US/…Кросс-браузерный плагин jQuery .
Кросс-баузер, кросс-доменная библиотека, которая использует
mutationObserver
iFrame для изменения размера содержимого иpostMessage
обмена данными между iFrame и страницей хоста. Работает с или без JQuery.источник
Все приведенные к настоящему времени решения учитывают только один раз изменение размера. Вы упоминаете, что хотите изменить размер iFrame после изменения содержимого. Чтобы сделать это, вам нужно выполнить функцию внутри iFrame (как только содержимое будет изменено, вам нужно запустить событие, чтобы сказать, что содержимое изменилось).
Я застрял с этим некоторое время, так как код внутри iFrame казался ограниченным DOM внутри iFrame (и не мог редактировать iFrame), а код, выполняемый за пределами iFrame, застревал с DOM вне iFrame (и не мог забрать событие изнутри iFrame).
Решение пришло благодаря обнаружению (с помощью коллеги), что jQuery может сказать, какой DOM использовать. В этом случае DOM родительского окна.
Таким образом, такой код делает то, что вам нужно (при запуске внутри iFrame):
источник
jQuery("#IDofControlFiringResizeEvent").click(function ()
?однострочное решение для встраивания: начинается с минимального размера и увеличивается до размера контента. нет необходимости для тегов сценария.
источник
scrollHeight/scrollWidth
должны быть немного скорректированы, чтобы учесть поля тела. Браузеры применяют ненулевые поля по умолчанию для элемента тела документов (и это также применимо к содержимому, загруженному во фреймы). Рабочий раствор я нашел , чтобы добавить это:parseInt(window.getComputedStyle(this.contentDocument.body).margin
.Если содержимое iframe принадлежит одному домену, это должно работать отлично. Это требует JQuery, хотя.
Для динамического изменения размера вы можете сделать это:
Затем на странице загрузки iframe добавьте:
источник
Вот кросс-браузерное решение, если вы не хотите использовать jQuery:
источник
После того, как я попробовал все на земле, это действительно работает для меня.
index.html
источник
Я использую этот код для автоматической регулировки высоты всех фреймов (с классом autoHeight), когда они загружаются на странице. Протестировано и работает в IE, FF, Chrome, Safari и Opera.
источник
Это надежное решение
HTML
источник
Я слегка модифицировал великолепное решение Гарнафа выше. Казалось, что его решение изменило размер iframe на основе размера прямо перед событием. Для моей ситуации (отправка электронной почты через iframe) мне нужно было изменить высоту iframe сразу после отправки. Например, показать ошибки проверки или сообщение «спасибо» после отправки.
Я просто удалил вложенную функцию click () и поместил ее в свой iframe html:
Работал для меня, но не уверен насчет кросс-браузерной функциональности.
источник
Если вы можете управлять как содержимым IFRAME, так и родительским окном, вам необходим iFrame Resizer .
Эта библиотека позволяет автоматически изменять размеры и ширину как одинаковых, так и междоменных iFrames, чтобы соответствовать их содержанию. Он предоставляет ряд функций для решения наиболее распространенных проблем с использованием iFrames, в том числе:
источник
все не может работать с использованием вышеуказанных методов.
JavaScript:
HTML:
Конверт: IE 10, Windows 7 x64
источник
Я нашел другое решение после некоторых экспериментов. Первоначально я попробовал код, помеченный как «лучший ответ» на этот вопрос, и он не сработал. Я думаю, потому что мой iframe в моей программе в то время создавался динамически. Вот код, который я использовал (он работал для меня):
Javascript внутри загружаемого iframe:
Вот HTML-код для iframe:
Вот весь код в моем iframe:
Я провел тестирование в Chrome и немного в Firefox (в Windows XP). У меня еще есть тесты, поэтому, пожалуйста, расскажите, как это работает для вас.
источник
Вот как я бы это сделал (проверено в FF / Chrome):
источник
Вот несколько методов:
И ДРУГОЙ АЛЬТЕРНАТИВЫ
Чтобы скрыть прокрутку с 2 альтернативами, как показано выше
Взломать со вторым кодом
Чтобы скрыть полосы прокрутки iFrame, родительский элемент сделан «переполнением: скрыто», чтобы скрыть полосы прокрутки, а iFrame сделан, чтобы подняться до 150% ширины и высоты, что заставляет полосы прокрутки вне страницы и, поскольку тело не ' При наличии полос прокрутки нельзя ожидать, что фрейм будет превышать границы страницы. Это скрывает полосы прокрутки iFrame с полной шириной!
источник: установить высоту iframe
источник
В случае, если кто-то сюда попал: у меня была проблема с решениями, когда я удалял div из iframe - iframe не стал короче.
Есть плагин Jquery, который делает эту работу:
http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html
источник
Я нашел этот ресайзер для работы лучше:
Обратите внимание, что объект стиля удален.
источник
В jQuery это лучший вариант для меня, который действительно помогает мне !! Я жду, что вам поможет!
IFrame
JQuery
источник
контекст
Я должен был сделать это сам в контексте веб-расширения. Это веб-расширение внедряет некоторый кусок пользовательского интерфейса в каждую страницу, и этот пользовательский интерфейс находится внутри
iframe
. Содержимое внутриiframe
является динамическим, поэтому мне пришлось перенастроить ширину и высоту самого объектаiframe
.Я использую React, но концепция применима к каждой библиотеке.
Мое решение (предполагается, что вы контролируете как страницу, так и фрейм)
Внутри
iframe
я изменилbody
стили, чтобы иметь действительно большие размеры. Это позволит расположить элементы внутри, используя все необходимое пространство. Созданиеwidth
иheight
100% не работает для меня (я думаю, потому что у iframe есть значение по умолчаниюwidth = 300px
иheight = 150px
)Затем я вставил весь интерфейс iframe в div и дал ему несколько стилей
После рендеринга моего приложения внутри этого
#ui-root
(в React я делаю это внутриcomponentDidMount
) я вычисляю размеры этого элемента div и синхронизирую их с родительской страницей, используяwindow.postMessage
:В родительском фрейме я делаю что-то вроде этого:
источник
Можно создать «похожий на привидение» IFrame, который действует так, как будто его там не было.
См. Http://codecopy.wordpress.com/2013/02/22/ghost-iframe-crossdomain-iframe-resize/
В основном вы используете систему событий,
parent.postMessage(..)
описанную в https://developer.mozilla.org/en-US/docs/DOM/window.postMessageЭто работает во всех современных браузерах!
источник
Я знаю, что пост старый, но я верю, что это еще один способ сделать это. Я только что реализовал в своем коде. Прекрасно работает как при загрузке страницы, так и при изменении размера страницы:
источник
Javascript для размещения в шапке:
Вот код iframe html:
Таблица стилей CSS
>
источник
Для атрибута angularjs:
Обратите внимание на процент, я вставил его, чтобы вы могли противостоять масштабированию, обычно выполняемому для iframe, текста, рекламы и т. Д., Просто введите 0, если масштабирование не реализовано
источник
Вот как я это делал на нагрузке или когда все меняется.
источник
Ясно, что существует множество сценариев, однако у меня был один домен для документа и iframe, и я смог добавить это в конец содержимого iframe:
Это «находит» родительский контейнер и затем устанавливает длину, добавляя коэффициент выдумки 50 пикселей, чтобы удалить полосу прокрутки.
Там нет ничего, чтобы «наблюдать» за изменением высоты документа, это мне не понадобилось для моего варианта использования. В своем ответе я привожу средство ссылки на родительский контейнер без использования идентификаторов, запеченных в содержимом parent / iframe.
источник
Если вы можете жить с фиксированным соотношением сторон и вам нужен адаптивный iframe , этот код будет вам полезен. Это просто правила CSS.
У iframe должен быть div как контейнер.
Исходный код основан на этом сайте, и у Бен Маршалла есть хорошее объяснение.
источник
Простота:
источник
Если содержимое является просто очень простым HTML, самый простой способ - удалить iframe с помощью javascript.
HTML код:
Javascript код:
источник
источник