คำตอบที่ดีขึ้นเล็กน้อยสำหรับ Aristos ...
<script type="text/javascript">
function resizeIframe(iframe) {
iframe.height = iframe.contentWindow.document.body.scrollHeight + "px";
}
</script>
จากนั้นให้ประกาศใน iframe ของคุณดังนี้:
<iframe onload="resizeIframe(this)" ...
มีการปรับปรุงเล็กน้อยสองประการ:
- คุณไม่จำเป็นต้องรับองค์ประกอบผ่าน document.getElementById - เพราะคุณมีมันอยู่แล้วในการติดต่อกลับ onload
- ไม่จำเป็นต้องตั้งค่า
iframe.height = ""
หากคุณจะมอบหมายมันในคำสั่งถัดไป การทำเช่นนั้นจะเกิดค่าโสหุ้ยในขณะที่คุณกำลังจัดการกับองค์ประกอบ DOM
แก้ไข: หากเนื้อหาในเฟรมเปลี่ยนแปลงตลอดเวลาให้โทร:
parent.resizeIframe(this.frameElement);
จากภายใน iframe หลังจากการอัปเดต ทำงานเพื่อต้นกำเนิดเดียวกัน
หรือเพื่อตรวจจับอัตโนมัติ:
// on resize
this.container = this.frameElement.contentWindow.document.body;
this.watch = () => {
cancelAnimationFrame(this.watcher);
if (this.lastScrollHeight !== container.scrollHeight) {
parent.resizeIframeToContentSize(this.frameElement);
}
this.lastScrollHeight = container.scrollHeight;
this.watcher = requestAnimationFrame(this.watch);
};
this.watcher = window.requestAnimationFrame(this.watch);