Konteks
Saya harus melakukan ini sendiri dalam konteks ekstensi web. Ekstensi web ini menyuntikkan sebagian UI ke setiap halaman, dan UI ini tinggal di dalam sebuah iframe. Konten di dalamnya iframedinamis, jadi saya harus menyesuaikan kembali lebar dan tinggi dari iframedirinya sendiri.
Saya menggunakan Bereaksi tetapi konsep ini berlaku untuk setiap perpustakaan.
Solusi saya (ini mengasumsikan bahwa Anda mengontrol halaman dan iframe)
Di dalam iframesaya mengubah bodygaya untuk memiliki dimensi yang sangat besar. Ini akan memungkinkan elemen-elemen di dalam lay out menggunakan semua ruang yang diperlukan. Pembuatan widthdan height100% tidak berfungsi untuk saya (saya kira karena iframe memiliki default width = 300pxdan height = 150px)
/* something like this */
body {
width: 99999px;
height: 99999px;
}
Lalu saya menyuntikkan semua iframe UI di dalam div dan memberikannya beberapa style
#ui-root {
display: 'inline-block';
}
Setelah merender aplikasi saya di dalam ini #ui-root(dalam Bereaksi saya melakukan ini di dalam componentDidMount) saya menghitung dimensi div ini seperti dan menyinkronkannya ke halaman induk menggunakan window.postMessage:
let elRect = el.getBoundingClientRect()
window.parent.postMessage({
type: 'resize-iframe',
payload: {
width: elRect.width,
height: elRect.height
}
}, '*')
Dalam kerangka induk saya melakukan sesuatu seperti ini:
window.addEventListener('message', (ev) => {
if(ev.data.type && ev.data.type === 'resize-iframe') {
iframe.style.width = ev.data.payload.width + 'px'
iframe.style.height = ev.data.payload.height + 'px'
}
}, false)