前言
关于iFrame是否过时的争论从未停息,我曾狂恋过她、也曾憎恶过她,但是最近项目中关于她的一番折腾,那我开始心平气和地去看待她,她不好也不坏就在那里,用与不用全在于你。
这篇文章我不想发表什么观点,只是想汇总展示一下别人对她的一些观点,希望对大家有所启发。
问题提出:
听说iFrame已经过时了,真希望这不是真的,难以想象不再使用她的后果如何。我想提出下面两个问题,希望大家能探讨一下:
1、为什么iFrame标签会过时?
2、如果iFrame标签过时了,使用什么方法去替代她?
问题回答:
A:我认为W3C在DOCTYPE为Strict HTML和XHTML文档里面实际已经将iframe排除在外。理论上来说,你可以使用<object>元素来添加一些外来的对象到你的文档里面,但是跨浏览器开发的限制使得对许多开发人员来说,这种开发变得不可取。但是一个好消息是在HTML 5中,iFrame又回来了,并且多了两个新的属性 seamless 和 sandbox。
B:HTML 5里面依旧支持iframe,所以我认为在可以预见的未来,iFrame不会过时。回答一下你的其它两个问题:
1、iframe大部分时候并不是友好的:很难通过URL获取iframe的内容、大多数"技术恐惧"的用户讨厌frames、相对而言浏览器渲染iframe效率更低
2、至于替代,你不但可以使用动态页面(SSI, PHP, Rails等)生成,或者可以使用JavaScript、AJAX去改变内容。
声明一点:我们这儿讨论的iFrame是一个接口元素(interface element),并不是一个隐藏元素(hidden element)用于加载其它东西。
C: iFrame对于页面的布局来说是过时的了。永远不要用iFrame进行布局,你可以使用很好的CSS布局,甚至table-based布局也比iFrame布局好。至于何时使用iFrame,我总结了两点如下:
1、ads:通常加载一些页面广告就是使用这种技术的,iFrame可以封装好广告页面,使广告页面的CSS不会影响你的整体页面
2、hidden iframe:使用其可用来做很多有用的事情,比如追踪(Tracking)、替代AJAX等。
D:我之前的公司,我们提供一个主机应用程序(HOST Application),客户然后将我们的主机应用程序整合到她们自己的网站。通常,他们都会使用一个iFrame来做这件事情,将我们的主机应用程序页面调整后集成到他们的页面中。有时这样做起来甚至可以达到无缝集成的效果,我认为有时iFrame标签很有用的。
小结:
前段时间项目中iFrame的使用很频繁,由于在网页中效果还算不错,就没有多加思考,但随着项目的进展,发现iFrame在Mobile客户端的webview里面效果很差,甚至不起作用,不得以我们开始大动干戈地将iFrame一个一个的替换掉。至此我想iFrame是好是坏,我们大可不必过多去想,我们要做的是了解清楚它的方方面面,有选择有针对的去使用她。