Я хочу изменить размер iframe, чтобы соответствовать его содержимому, но каждый раз, когда я делаю это, высота содержимого увеличивается на постоянное значение, и мне нужно изменить размер iframe снова. И так далее.
Codepen
HTML:
<iframe style="width: 100%; max-width: 400px; box-shadow: 0 0 0 1px #000;"></iframe>
JS:
const html = `<div>
line 1<br>
line 2<br>
<table style="width:100%; height:100%;">
<tbody>
<tr>
<td style="text-align: center; background: #ddd;">table content</td>
</tr>
</tbody>
</table>
</div>`;
window.addEventListener('load', () => {
const iframe = document.querySelector('iframe');
iframe.contentWindow.document.body.style.margin = 0;
iframe.contentWindow.document.body.innerHTML = `
<div id="root"> <!-- iframe will be resized by its offsetHeight -->
<div style="clear: both;"></div> <!-- clear fix, just in case -->
<div id="content-root">${ html }</div> <!-- custom content goes here -->
<div style="clear: both;"></div> <!-- clear fix, just in case -->
</div>`;
const rootEl = iframe.contentWindow.document.querySelector('#root');
// Resize iframe with interval.
// Since the content of the iframe is not changing,
// the height of the iframe should not change starting from the second iteration
setInterval(() => {
iframe.style.height = rootEl.offsetHeight + 'px';
}, 2000);
});