
再谈iframe自适应高度(1) |
这贴比较长,没有耐性的朋友请直接拖到帖子末尾的代码示例,或者直接去玩我提供的Demo。 Demo页面:主页面 iframe_a.html ,被包含页面 iframe_b.htm 和 iframe_c.html 下面开始讲: 通过Google搜索iframe 自适应高度,结果5W多条,搜索iframe 高度自适应,结果2W多条。 这篇文章,希望在这两个方面再做一些深入。 可能有人还没接触到这个问题过,先说明一下,什么是高度自适应吧。所谓iframe高度自适应,就是,基于界面美观和交互的考虑,隐藏了iframe的border和scrollbar,让人看不出它是个iframe。如果iframe始终调用同一个固定高度的页面,我们直接写死iframe高度就可以了。而如果iframe要切换页面,或者被包含页面要做DOM动态操作,这时候,就需要程序去同步iframe高度和被包含页的实际高度了。 顺便说下,iframe在迫不得已的时候才去用,它会给前端开发带来太多的麻烦。 传统做法大致有两个: 两个方法都只处理了静的东西,就是只在内容加载的时候执行,如果JS去操作DOM引起的高度变化,都不太方便。 如果在主窗口做一个Interval,不停的来获取被包含页的高度,然后做同步,是不是即方便,又解决了JS操作DOM的问题了呢?答案是肯定的。 Demo页面:主页面 iframe_a.html ,被包含页面 iframe_b.htm 和 iframe_c.html 主页面代码示例: <iframe id="frame_content" src="iframe_b.html" scrolling="no" frameborder= 一直执行,效率会不会有问题? 下面谈谈各浏览器的兼容性问题,如何获取到正确的高度,主要是对body.scrollHeight和documentElement.scrollHeight两个值得比较。注意本文用的是这个doctype,不同的doctype应该不会影响结果,但是假如你的页面没有申明doctype,那还是先去加一个吧。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/ 在主页面追加以下测试代码,以输出这两个值,代码示例: <div><button onclick="checkHeight()">Check Height</button></div> 被加载页面,可以切换一个绝对定位的层,来使页面高度动态改变。如果层展开,则会撑高页面高度。代码示例: <div><button onclick="toggleOverlay()">Toggle Overlay</button> </div> <div style="height:160px;position:relative"> <div id="overlay" style="position:absolute;width:280px;height:280px;display |