用例是iframe底部附近的CSS样式下拉列表,除非在下拉列表展开时iframe高度增加,否则将被截断。根据下面的链接,我将以下代码段放在每个输入的onchange事件*中调整iframe的大小。
function resizeIframe(obj){
obj.style.height = 0;
obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
}
当展开下拉列表时,iframe的大小会增加。但是,当我们选择一个项目(也编程为触发resizeIframe
)时,iframe不会缩减。在所有的事情中,代码在IE10中运行良好!
使用超时工作但会产生明显的闪烁:
// works but gives noticable flicker
function resizeIframe(obj){
obj.style.height = 0; //setting this to 'auto' also gives flicker
setTimeout(
() => {obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'},
0
);
}
我还应该澄清,在这个用例中预先计算最大高度是不可接受的,因为它只会导致额外的空白空间。
*我可以将JS注入iframe但不能修改iframe HTML。因此,虽然在输入更改上触发事件并不理想,但它可以完成工作,即使在使用不太理想的硬件的IE10上也可以保持高性能。