Я попробовал несколько решений, но безуспешно. Мне интересно, есть ли решение, желательно с простым для понимания учебником.
111
Я попробовал несколько решений, но безуспешно. Мне интересно, есть ли решение, желательно с простым для понимания учебником.
Ответы:
У вас есть три альтернативы:
1. Используйте iFrame-resizer.
Это простая библиотека для сохранения размеров iFrames в соответствии с их содержимым. Он использует API-интерфейсы PostMessage и MutationObserver с откатом для IE8-10. Он также имеет параметры для страницы содержимого, чтобы запросить содержащий iFrame определенный размер, а также может закрыть iFrame, когда вы закончите с ним.
https://github.com/davidjbradshaw/iframe-resizer
2. Используйте Easy XDM (комбинация PostMessage + Flash).
Easy XDM использует набор уловок для обеспечения междоменной связи между различными окнами в ряде браузеров, и есть примеры его использования для изменения размера iframe:
http://easyxdm.net/wp/2010/03/17/resize-iframe-based-on-content/
http://kinsey.no/blog/index.php/2010/02/19/resizing-iframes-using-easyxdm/
Easy XDM работает с использованием PostMessage в современных браузерах и решения на основе Flash в качестве запасного варианта для старых браузеров.
См. Также эту ветку на Stackoverflow (есть и другие, это часто задаваемый вопрос). Кроме того, похоже , что Facebook использует аналогичный подход .
3. Общайтесь через сервер
Другой вариант - отправить высоту iframe на ваш сервер, а затем опросить с этого сервера с родительской веб-страницы с помощью JSONP (или, если возможно, использовать длинный опрос).
источник
У меня есть решение для динамической установки высоты iframe в зависимости от его содержимого. Это работает для междоменного контента. Для этого необходимо выполнить несколько шагов.
Предположим, вы добавили iframe на веб-страницу abc.com/page
<div> <iframe id="IframeId" src="http://xyz.pqr/contactpage" style="width:100%;" onload="setIframeHeight(this)"></iframe> </div>
Затем вам нужно привязать событие окна "message" к веб-странице "abc.com/page".
При загрузке iframe вы должны отправить сообщение содержимому окна iframe с сообщением "FrameHeight":
источник
Я сравнивал scrollWidth iframe до тех пор, пока он не изменил размер, в то время как я постепенно устанавливаю высоту IFrame. И у меня это сработало. Вы можете отрегулировать шаг по своему желанию.
источник
У меня есть сценарий, который помещается в iframe с его содержимым. Он также гарантирует, что iFrameResizer существует (внедряет его как скрипт), а затем изменяет размер.
Ниже я приведу упрощенный пример.
Затем содержимое iframe можно внедрить в любое место на другой странице / сайте с помощью сценария следующим образом:
Содержимое iframe будет вставлено ниже, где бы вы ни разместили тег скрипта.
Надеюсь, это кому-то поможет. 👍
источник
<script ... data-src="http://google.com">
и заполнил им iframe src.iframe-resizer@4.2.10
Вот мое простое решение на этой странице. http://lab.ohshiftlabs.com/iframesize/
Вот как это работает;
В основном, если вы можете редактировать страницу в другом домене, вы можете разместить другую страницу iframe, принадлежащую вашему серверу, которая сохраняет высоту для файлов cookie. С интервалом чтения файлов cookie при его обновлении обновите высоту iframe. Вот и все.
Скачать; http://lab.ohshiftlabs.com/iframesize/iframesizepost.zip
Изменить: 2019 декабрь
В приведенном выше решении в основном используется другой iframe внутри iframe. 3-й iframe принадлежит домену верхней страницы, который вы называете этой страницей со строкой запроса, которая сохраняет значение размера в cookie, внешняя страница проверяет этот запрос с некоторым интервалом. Но это не лучшее решение, поэтому вам следует следовать этому:
На верхней странице:
Здесь вы можете проверить,
m.origin
откуда он.На странице фрейма:
Хотя, пожалуйста, не забывайте, что это не очень безопасный способ. Чтобы сделать его безопасным, обновите значение * (targetOrigin) с желаемым значением. Следуйте документации: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
источник
Я нашел еще одно серверное решение для веб-разработчиков, использующее PHP для получения размера iframe.
Сначала используется серверный скрипт PHP для внешнего вызова через внутреннюю функцию: (например,
file_get_contents
with, но curl и dom).Вам нужно отобразить под div (
iframe_reserve
) HTML-код, сгенерированный вызовом функции, с помощью простогоecho curl_get_file_contents("location url iframe","activation proxy")
После этого функция события тела при загрузке с помощью javascript принимает высоту iframe страницы просто с помощью простого управления содержимым div (
iframe_reserve
)Итак, я использовал
divHeight = document.getElementById("iframe_reserve").clientHeight;
высоту внешней страницы, которую мы собираемся вызвать после замаскирования контейнера div (iframe_reserve
). После этого загружаем iframe с его хорошей высотой, вот и все.источник
Я столкнулся с этой проблемой, когда работал над чем-то на работе (используя React). По сути, у нас есть внешний HTML-контент, который мы сохраняем в нашу таблицу документов в базе данных, а затем вставляем на страницу при определенных обстоятельствах, когда вы находитесь в наборе данных Documents.
Итак, учитывая
n
встроенные строки, из которых доn
может содержать внешний html, нам нужно было разработать систему для автоматического изменения размера iframe каждой встроенной строки после полной загрузки содержимого в каждом. Покрутив колеса немного, я сделал это вот как:message
прослушиватель событий в индексе нашего приложения React, который проверяет конкретный ключ, который мы установим из iframe отправителя.<script>
тег, который будет ждатьwindow.onload
срабатывания iframe . Как только это сработает, мыpostMessage
отправляем сообщение в родительское окно с информацией об идентификаторе iframe, вычисленной высоте и т. Д.id
iframe, который мы передаем вMessageEvent
объектiframe
, просто установите высоту из значения, которое передается из iframepostMessage
.источник