Я загружаю aspx веб-страницу в iframe. Содержимое в Iframe может иметь большую высоту, чем высота iframe. У iframe не должно быть полос прокрутки.
У меня есть div
тег- обертка внутри iframe, который в основном весь контент. Я написал несколько jQuery для изменения размера:
$("#TB_window", window.parent.document).height($("body").height() + 50);
где
TB_window
div, в котором Iframe
содержится
body
- тег body aspx в iframe.
Этот скрипт прикреплен к контенту iframe. Я получаю TB_window
элемент с родительской страницы. Хотя это отлично работает на Chrome, но TB_window рушится в Firefox. Я действительно смущен / потерян на том, почему это происходит.
javascript
jquery
asp.net
iframe
Karry
источник
источник
Ответы:
Вы можете получить высоту
IFRAME
содержимого с помощью:contentWindow.document.body.scrollHeight
После
IFRAME
загрузки вы можете изменить высоту, выполнив следующие действия:Затем на
IFRAME
теге вы подключаете обработчик следующим образом:Некоторое время назад у меня была ситуация, когда мне дополнительно нужно было позвонить
iframeLoaded
от самогоIFRAME
себя после того, как была отправлена форма. Вы можете сделать это, выполнив следующие действия вIFRAME
скриптах содержимого:источник
X-FRAME-OPTIONS
чтобы добавить строку как:Response.AddHeader("X-FRAME-OPTIONS", "SAMEORIGIN");
илиresponse.addHeader("X-FRAME-OPTIONS", "Allow-From https://some.othersite.com");
iFrameID.height = "";
наiFrameID.height = "20px";
. Высота iframe в браузере по умолчанию равна 150px, что и""
сбрасывает его обратно.Немного улучшенный ответ Аристосу ...
Затем объявите в своем iframe следующее:
Есть два небольших улучшения:
iframe.height = ""
если вы собираетесь переназначить его в следующем утверждении. Это на самом деле влечет за собой накладные расходы, когда вы имеете дело с элементом DOM.Редактировать: если содержимое во фрейме постоянно меняется, тогда позвоните:
изнутри iframe после обновления. Работает для того же происхождения.
Или для автоматического определения:
источник
function resizeIframe(iframe) { var size=iframe.contentWindow.document.body.scrollHeight; var size_new=size+20; iframe.height = size_new + "px"; }
Я обнаружил, что принятого ответа недостаточно, поскольку X-FRAME-OPTIONS: Allow-From не поддерживается в Safari или Chrome . Вместо этого пошли с другим подходом, который можно найти в презентации Бена Винегара из Disqus. Идея состоит в том, чтобы добавить прослушиватель событий в родительское окно, а затем внутри iframe, использовать window.postMessage, чтобы отправить событие родителю, сказав ему сделать что-то (изменить размер iframe).
Поэтому в родительском документе добавьте прослушиватель событий:
А внутри фрейма напишите функцию для отправки сообщения:
Наконец, внутри iframe добавьте onLoad в тег body, чтобы запустить функцию изменения размера:
источник
setInterval(resize, 1000);
Добавьте это в iframe, это работает для меня:
И если вы используете jQuery, попробуйте этот код:
источник
Существует четыре различных свойства, на которые вы можете посмотреть, чтобы получить высоту содержимого в iFrame.
К сожалению, все они могут дать разные ответы, и они несовместимы между браузерами. Если вы установите поле для тела в 0, то
document.body.offsetHeight
лучший ответ. Чтобы получить правильное значение, попробуйте эту функцию; которая берется из библиотеки iframe-resizer, которая также следит за сохранением правильного размера iFrame при изменении содержимого или изменении размера браузера.источник
Другие ответы не работали для меня, поэтому я сделал некоторые изменения. Надеюсь, это поможет
источник
Вместо того, чтобы использовать javscript / jquery, я нашел самый простой способ:
Здесь 1vh = 1% от высоты окна браузера. Таким образом, теоретическое значение высоты, которое должно быть установлено, составляет 100vh, но практически 98vh сделал магию.
источник
На всякий случай это кому-нибудь поможет. Я вырывал свои волосы, пытаясь заставить это работать, затем я заметил, что у iframe была запись класса с высотой: 100%. Когда я убрал это, все работало как ожидалось. Поэтому, пожалуйста, проверьте наличие конфликтов CSS.
источник
Вы также можете добавить повторяющийся requestAnimationFrame в свой resizeIframe (например, из ответа @ BlueFish), который всегда будет вызываться до того, как браузер раскрасит макет, и вы можете обновить высоту iframe, когда его содержимое изменило свою высоту. например, формы ввода, ленивый загруженный контент и т. д.
Ваш обратный вызов должен быть достаточно быстрым, чтобы не иметь большого влияния на общую производительность
источник
Uncaught TypeError: Cannot read property 'scrollHeight' of null
так какbody
естьnull
, однако обычно работает.Вы можете отослать связанный вопрос здесь - Как сделать ширину и высоту iframe такими же, как у родительского div?
Установить динамическую высоту -
И коды - https://gist.github.com/mohandere/a2e67971858ee2c3999d62e3843889a8
источник
Я использую JQuery и приведенный ниже код работает на меня,
источник
Я нашел ответ от Трои, не работал. Это тот же код, переработанный для AJAX:
источник
Чтобы добавить к окну, которое кажется обрезанным внизу, особенно когда у вас нет прокрутки, я использовал:
источник
Это полезно, когда вам требуется решение без jquery. В этом случае вы должны попробовать добавить контейнер и установить для него отступ в процентах.
HTML пример кода:
Пример кода CSS:
источник
Простое решение состоит в том, чтобы измерить ширину и высоту области содержимого, а затем использовать эти измерения для расчета процентного содержания нижнего отступа.
В этом случае размеры составляют 1680 x 720 пикселей, поэтому отступ снизу составляет 720/1680 = 0,43 * 100, что составляет 43%.
источник
Немного улучшенный ответ на BlueFish ...
Это учитывает высоту экрана Windows (браузер, телефон), который хорош для адаптивного дизайна и фреймов, которые имеют огромную высоту. Заполнение представляет собой заполнение, которое вы хотите выше и ниже фрейма в случае, если оно проходит через весь экран.
источник
источник
Пример с использованием PHP htmlspecialchars () + проверка, если высота существует и> 0:
источник
просто сделайте позицию контейнера iframe: absolute, и iframe автоматически изменит свою высоту в соответствии с его содержимым
источник
и / или
См. Вопрос переполнения стека. Как получить высоту элемента тела .
Попробуйте это, чтобы найти высоту тела в jQuery:
Не имеет значения, если Firebug . Возможно, это проблема.
источник