Я хотел бы, чтобы iframe занимал столько места по вертикали, сколько необходимо для отображения его содержимого, а не для отображения полосы прокрутки. Это вообще возможно?
Есть ли обходные пути?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Этот фрагмент CSS должен удалить вертикальную полосу прокрутки:
body {
overflow-x: hidden;
overflow-y: hidden;
}
Я еще не уверен, что он займет столько места по вертикали, сколько ему нужно, но я посмотрю, не смогу ли я это понять.
Это должно установить высоту IFRAME на высоту его содержимого:
<script type = "text/javascript">
the_height = document.getElementById('the_iframe').contentWindow.document.body.scrollHeight;
document.getElementById('the_iframe').height = the_height;
</script>
Вы можете добавить scrolling = "no" к IFRAME, чтобы отключить полосы прокрутки.
редактировать: Упс, забыл объявить the_height.
Добавление декларации DOCTYPE в исходный документ IFRAME поможет вычислить правильное значение из строки
document.getElementById('the_iframe').contentWindow.document.body.scrollHeight
У меня были проблемы как с IE, так и с FF, поскольку он отображал документ iframe в режиме «причуд», пока я не добавил DOCTYPE.
Поддержка FF / IE / Chrome: .scrollHeight не работает с Chrome, поэтому я придумал пример javascript с использованием jQuery для установки всех высот IFRAME на странице на основе содержимого iframe. ПРИМЕЧАНИЕ. Это справочные страницы в вашем текущем домене.
<script type = "text/javascript">
$(document).ready(function(){
$('iframe').each(function(){
var context = $(this);
context.load(function(event){ // attach the onload event to the iframe
var body = $(this.contentWindow.document).find('body');
if (body.length > 0 && $(body).find('*').length > 0) { // check if iframe has contents
context.height($(body.get(0)).height() + 20);
} else {
context.hide(); // hide iframes with no contents
}
});
});
});
</script>
Обходной путь - не использовать <iframe> и код предварительной обработки на стороне сервера.
Это не всегда возможно, если только вы не собираетесь создавать собственный прокси-сервер, который переписывает ссылки в теле html ... это шутка.
Также ознакомьтесь с этой веткой: Как DiggBar динамически изменяет размер своего iframe в зависимости от содержимого, не относящегося к их домену?.
Он отвечает на тот же вопрос.
Очень удобно, ура. Возможно, стоит упомянуть, что это не будет работать так хорошо, если iframe находится в другом домене из-за той же политики происхождения.