iframe可能有类似框架和不小心使用的问题XMLHttpRequest
:它们打破了每个URL的一个文档范例,这对于网络的正常运行至关重要(想想书签,深层链接,搜索引擎......).
如果您正在创建Web应用程序,请使用您想要的任何技术(包括框架,闪存,小程序,等等).如果您正在创建一个实际的信息性网页,请坚持使用无框架HTML,CSS和不引人注目的JavaScripts,并记住该页面仍然可以在禁用脚本的情况下使用.
iframe可能有类似框架和不小心使用的问题XMLHttpRequest
:它们打破了每个URL的一个文档范例,这对于网络的正常运行至关重要(想想书签,深层链接,搜索引擎......).
如果您正在创建Web应用程序,请使用您想要的任何技术(包括框架,闪存,小程序,等等).如果您正在创建一个实际的信息性网页,请坚持使用无框架HTML,CSS和不引人注目的JavaScripts,并记住该页面仍然可以在禁用脚本的情况下使用.
正如诺斯雷德娜所说,这可能是因为人们将它们与框架混淆,实际上有很多有效的反对框架的论据.其中一些不适用于iframe,但其中一些也是如此.
最引人注目的问题可能是深度链接问题:iframe确实受到这种影响的程度低于帧,但如果你允许用户在iframe中的不同页面之间导航,那将是一个问题.还有一些可用性问题需要注意.最常见的考试是双滚动条,我个人觉得非常讨厌.
我倾向于避免使用iframe,主要是因为我觉得它是一个不优雅的解决方案.我发现当我真正坐下来思考它时,几乎总有一个更好的解决方案.尽管如此,我也相信他们有一席之地.这是网络世界的转向:仅仅因为它有被滥用的历史,它已成为不应该被使用的共识.事实并非如此,但我相信你在使用iframe之前应该三思而后行.
我想补充说,大多数时候,iframe也没有帮助SEO页面.Googlebot不会在页面上放置iframe的内容.
有一种情况是(几乎)需要iframe:当iframe的内容位于不同的域中时,您必须执行身份验证或检查绑定到该域的cookie.它实际上防止了安全问题,而不是创建它们.
例如,如果您正在编写一种可以在任何网站上使用的插件,但插件必须在另一个域上进行身份验证,则可以创建一个在外部域上运行和验证的无缝iframe.
我认为人们会将iframe与HTML框架混淆,并且框架被普遍鄙视.
人们一直使用iframe,甚至没有意识到.如果我没记错的话,TinyMCE使用iFrames.
一个原因是安全性 - iframe注入攻击很常见.有关说明,请参阅此Ars Technica页面:
http://arstechnica.com/security/news/2008/03/ongoing-iframe-attack-proving-difficult-to-kill.ars
另一个页面总结了一些漏洞(我不知道其中有多少对当前的浏览器有效,但文章不是那么老):
http://www.thespanner.co.uk/2007/10/24/iframes-security-summary/
另一方面,它们支持跨域通信,并且通常被"ajaxy"webapps使用:
http://softwareas.com/cross-domain-communication-with-iframes