Я использую этот кусок кода в 2 проектах, у меня он работает нормально. Я не знаю, есть ли лучший способ добиться этого (обратите внимание, что этот код имеет setInterval, он будет проверять высоту содержимого iframe каждую 1 секунду и обновлять его высоту). Он также использует jQuery.
let iframe = document.getElementById('your_iframe_id'),
current_height = 0,
iframe_content = $(iframe).contents().find('body');
setInterval(() => {
let new_height = iframe.contents().find('body').height();
current_height = new_frame_height(current_height, new_height);
iframe.css({ height: current_height });
}, 1000)
function new_frame_height(last_height, height) {
if(height != last_height + 60) {
last_height = height;
}
return last_height + 60
}
Кстати, я думаю, что это работает, только если iframe находится в том же домене, что и родительский.
Если это не так, блок перекрестного происхождения из браузера не позволит родителю читать содержимое детей.