在与网络开发人员合作的过程中,我总是听到他们说使用iframe是我们必须避免的事情,有些人说这是坏事,烦人并且会产生很多问题。
当我告诉我的前任老板“不是开发人员”有一天我会使用iframe时,他看着我作为一个糟糕的开发人员:)
我想知道的是,iframe在网络开发方面的历史非常糟糕吗?
这是一场灾难吗?
在某些情况下,我发现使用iframe是必须的,是说这意味着我是一个糟糕的开发者?
或者所有这些都是因为在开发过程中我们必须注意一些安全问题而难以处理?
如果你讨厌你的话,请列出你的分数,如果我的思路方式错误,请纠正我。
答案 0 :(得分:60)
iframe可能会出现与框架类似的问题以及XMLHttpRequest
的轻率使用:它们打破了每个网址的一个文档范例,这对于网络的正常运行至关重要(想想书签,深层链接,搜索引擎,...)。
如果您正在创建Web应用程序,请使用您想要的任何技术(包括框架,flash,applet,等等)。如果您正在创建一个实际的信息性网页,请坚持使用无框架的HTML,CSS和不引人注目的JavaScripts,并牢记该页面仍应可用于禁用脚本。
答案 1 :(得分:20)
正如诺斯雷德娜所说,这可能是因为人们将它们与框架混淆,实际上有很多有效的反对框架的论据。其中一些不适用于iframe,但其中一些也是如此。
最引人注目的问题可能是深度链接问题:iframe确实受到的影响程度低于帧,但如果你允许用户在iframe中的不同页面之间导航,那将是一个问题。还有一些可用性问题需要注意。最常见的考试是双滚动条,我个人觉得非常讨厌。
我倾向于避免使用iframe,主要是因为我觉得它是一个不优雅的解决方案。我发现当我真正坐下来思考它时,几乎总有一个更好的解决方案。尽管如此,我也相信他们有一席之地。这是网络世界的转向:仅仅因为它有被滥用的历史,它已成为不应该被使用的共识。这种情况确实不是这样,但我相信你在使用iframe之前应该三思而行。
答案 2 :(得分:15)
我想在大多数情况下添加 ,iframe也无法帮助页面的SEO。 Googlebot不会在页面上放置iframe的内容。
答案 3 :(得分:9)
有一种情况是(几乎)需要iframe:当iframe的内容位于不同的域中时,您必须执行身份验证或检查绑定到该域的Cookie。它实际上可以防止安全问题,而不是创建它们。
例如,如果您正在编写一种可以在任何网站上使用的插件,但该插件必须在另一个域上进行身份验证,您可以创建一个在外部域上运行和验证的无缝iframe。
答案 4 :(得分:8)
我认为人们会将iframe与HTML框架混淆,并且框架被普遍鄙视。
人们在没有意识到的情况下始终使用iframe。如果我没记错的话,TinyMCE会使用iFrame。
答案 5 :(得分:8)
一个原因是安全性 - 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
答案 6 :(得分:4)
一个问题是他们有自己的页面生命周期,因此主机和iframe子级之间的交互是有限的(查询字符串,会话变量或JS)。另一种方法是考虑使用滚动div。
另一个问题是打印。 iframe的输出(或者就此而言的滚动div)可能是不可预测的,并且在不同的浏览器之间变化很大。
答案 7 :(得分:4)
用于构建Web应用程序的Iframe没有任何问题。它们允许将目标内容与内存封装相结合。有多少次有人建立了一些光滑的小javascript ajax,当他们忘记并将最新的Jlibrary上传到他们的父页面或一些DIV加载的内容时,这些东西完全爆炸了?大多数其他问题都围绕着搜索引擎优化,只有你真的想要窃取别人的内容,这无论如何都是非常愚蠢的。 iframe为您提供封装内存,并能够跨多个站点共享设计良好的页面。尽管许多人会相信,但iframe和/或它们的等价物将会存在很长时间。
答案 8 :(得分:3)
答案 9 :(得分:3)
他们被拒绝的一个原因是因为他们本身就很慢。当iframe开始加载时,其主页已经处于加载管道的高级阶段。 iframe和时髦的浏览几乎不可能结合起来。
答案 10 :(得分:3)
我认为IFrame有自己的位置。由于SEO等问题,我不会在前端/面向公众的网站上使用它们。对于内部/后端网络应用程序,我认为当你需要隔离特定部分的样式时它们很有用从页面的其余部分,例如报表查看器或HTML编辑器,如果所有内容都在一个文档中,则父页面中的继承样式可能会导致问题。我的2c ......
答案 11 :(得分:1)
我猜是因为它违背了整个html-described-contents + css-does-the-visual-design原教旨主义。过度使用iframe也会浪费性能,因为它会单独调用来获取帧。如果你考虑一下,AJAX基本上就像iframe,除了今天的时尚(可能不会在将来)。
安全方面,它有点问题,因为用户可能甚至不知道从其他域加载总垃圾。
答案 12 :(得分:1)
HTML元素不应该有行为。
答案 13 :(得分:0)
因为在安全方面,它们很难处理。一个表现良好的现代浏览器不允许您在iFrame中编写代码来处理页面上其他iFrame中的元素。这有时会使某些技术难以实现。
答案 14 :(得分:0)
您不应该使用iframe进行设计。 CSS在同样的事情上做得更好,也允许更多的自由。
答案 15 :(得分:-3)
这是一种不好的做法,一种懒惰的写作方式(阅读:做客户想要的)代码。在Google上搜索“iframe bad”(不带引号)会引发很多关于该主题的论坛讨论。如果您确实需要引入外部内容,请使用AJAX。更好的是,根本不要这样做。