iframe标签在网页中可以创建一个内嵌框架,通过指定src属性来调用另一个网页文档的内容。和frameset一样,用它来对网页结构进行拆分以使网页的某些部分保持公用,但相对frameset对整个网页进行框架结构的拆分来说,iframe更加灵活,可以内嵌到网页的任意地方。由于iframe使用上的这个特点,在一些网页中得到了大量运用,也导致了一些不适宜的滥用。网页设计将分析一下iframe这个网页元素常见的几种使用方式。
onload=”document.f.q.focus();if(document.images)new image().src=’/images/nav_logo4.png’”
这样一句代码,加载的图片nav_logo4.png在首页并没有用到,但搜索结果列表等其他页面使用此图片的时候只需要从缓存读取,不需要重新下载了。
除了以上三种应用,对于iframe元素也常见一些不恰当的运用。例如在页面中嵌入过多的iframe框架,通过指定框架外链接标签的target属性在点击时来更新iframe,这种用法和frameset类似,达到共用导航的目的。初衷是好,但其中的弊病也毋庸置疑。这样会导致一个页面请求过多,上文所提及的雅虎团队《best practices for speeding up your web site》一文中就明确优化页面需要“使iframe的数量最小”,归纳了其三种弊病:
- 即使内容为空也会造成资源损耗(包括客户端、服务器端);
- 阻滞页面onload事件触发(“blocks page onload”,又有译作“会阻止页面加载”,此处存疑)
- 没有语义(seo是网站营销的重要组成部分)
在xhtml1.0的下一个版本html5中,由于frameset标签对网页可用性方面产生的负面影响,没有对它提供支持,这也从侧面说明一些问题。
另外,由于内嵌的iframe不能自动适应其内部内容大小,为了保持页面显示的完整性,还需要编写一段javascript脚本来根据iframe内容的变化即时调整其大小。分散的多个请求再加上需要javascript脚本来修正更增加了多iframe页面系统运行的风险。那么,有没有什么好的方法能保持部分页面内容公用呢?服务器端早就给我们提供了解决方案,asp中的include,php中的require方法,都是用来包含一段已有的代码到程序中,这样同样能实现页面的某个部分(如导航菜单、页脚)公用,但是运行之后作为一个完整的页面输出,有效地减少了客户端请求,同时也不存在iframe的高度自适应的问题。
新闻热点
疑难解答