为什么HTML中的框架被弃用了?

67

HTML早期就有了框架(frames),但它们在最新版本中被弃用。许多浏览器(我已经尝试过Internet Explorer)甚至不能正确地显示框架。

为什么要这样做?框架有什么缺点?


最初的值为false。但除此之外,这个语句是正确的。 - Ignacio Vazquez-Abrams
11
好的,问题在于它们“存在”。 :) - Alex
3
框架仍然可以使用。Javadocs 仍然使用框架,并且在所有主要的浏览器上可靠地呈现。这里有一个示例:http://download.oracle.com/javase/7/docs/api/ - Asaph
我实际上使用 frames,因为我不希望用户保存内部网址。我相信现在可能有其他方法来完成这项工作,但当你没有学会新的技巧时,旧习惯难以改掉。 - user2506885
框架已被弃用,详情请参见这里的讨论:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/frame;以及这里的讨论:https://programmers.stackexchange.com/questions/144515/why-were-frames-deprecated-in-html5-but-not-iframes 和 https://dev59.com/TWLVa4cB1Zd3GeqPy7Vj。 - WBT
1
框架在某些情况下非常有用:http://reframe.deneskellner.com是一个很好的例子。当然,我本来可以不用框架完成它 - 但用这种方式如此简单和轻松。我不明白为什么退役是事物过时后的答案。 - dkellner
3个回答

66
Jakob Nielsen在1996年撰写的一篇专栏批评了框架。以下是一些关键观点:
  1. 框架阻止用户正确地将页面加入书签。当加载一个被加入书签的框架集合页面时,用户之前在框架内的点击不会起作用。只有外部URL被保存,用户必须手动导航到他们想去的位置。

  2. 框架对于打印网页提出挑战。同时打印所有框架并不适合纸张的不同尺寸(用户只能得到第一页),用户通常需要右键单击所需框架并选择相应的上下文菜单选项。

  3. 从搜索引擎进入的用户可能无法访问导航元素,如果它们位于另一个框架中,则只会重定向到搜索引擎在其中找到文本的那个框架。

虽然"框架集合"(最常用于90年代末/2000年代初的网页)正在消亡,但iframe(内联框架的缩写)仍然活跃。事实上,最近iframes在今天的"混搭"Web应用程序中被发现非常有用,并且在HTML5规范中提出了对iframe的扩展。

例如,Facebook在其面向应用程序开发人员的API中使用它们,以无缝地将第三方应用程序与其自己的站点集成,同时最小化安全风险。(在这种模型中,所有第三方代码都留在一个单独的域上,这对于安全原因是有好处的。)


我没有很好地理解第三点。这个点的意思是像搜索引擎带来的用户只会打开包含内容而不是框架索引页的页面。因此,他们将没有所有链接(因为大多数链接将在框架的其他部分中,这是通常的做法)。 - SonOfTheEARTh
2
@SonOfTheEARTh:是的,那就是我的意思。 - PleaseStand
3
第一点非常重要,但不幸的是,由于所有的模板系统和支持实时更改页面内容的JS技术,某些页面再次无法被加入书签... - Alissa
1
1996年是一个伟大的年份。从那时起发生了很多事情。今天,所有上述问题都可以轻松解决,不会有任何痛苦。1996年的原因大多已经失效。框架是实现几乎在Web上到处可见的某些内容的一种选项。许多页面,从Facebook到phpMyAdmin,看起来像框架,只是使用了不同的标记。框架唯一的弊病就是不能跨越框架边界编写;是的,在某些情况下这是一个缺点,但也是一种福音。否则,没有真正充分的理由反对框架。 - dkellner
这是我见过的关于框架历史的最客观写作总结。 - Sean the Bean
1
虽然这些信息可能很有趣,但我认为这并没有回答用户的问题。尼尔森提出的大多数反对意见也同样适用于iframes。我认为这个问题在这里得到了更好的回答: https://softwareengineering.stackexchange.com/questions/144515/why-were-frames-deprecated-in-html5-but-not-iframes - Rick Paul

9

8
现在我们正在使用JavaScript做完全相同的事情。太棒了。 - Ignacio Vazquez-Abrams
@tobyodavies:不,它们并不是被弃用了,在严格的XHTML中,框架被淘汰了。但是,我们仍然不推荐使用它们^^ - Pascal Qyy
使用哈希URL的状态机制确实避免了PleaseStand消息中提到的由框架(例如AngularJS与ui-router)引起的问题。 - djvs
1
iframe 在 HTML5 中并不过时。但是其他框架,如 frameset 是过时的。使用 iframe 对于实现跨域应用逻辑非常有用。 - Max
HTML frames和framesets在HTML5中并不过时。根据定义,这意味着它们在现代浏览器中不受支持。然而,所有浏览器仍然支持它们,无论是否在第一行使用<!doctype html>标签指示HTML 5文档。根据MDN的说法,frames已被弃用,这只是意味着不推荐使用:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frameset - undefined
显示剩余2条评论

6
不是回答OP而是平衡对框架集的抨击。
我认为它们非常好,当您想要保持菜单完整并且仍然:
  • 视觉上结合第三方页面/应用程序(phpmyadmin或类似)
  • 查看除HTML之外的文档类型(PDF或图像)。
  • 由于其width="x,*",您可以获得简单的“响应”行为。
同时,您可以在获取主要内容时提供平滑的菜单动画。
适度使用,它们超级棒。

2
没错。对于那些不喜欢框架的人,有一种古老的印度魔法叫做“不使用它们”。像魔法一样有效,并让其他人享受框架的好处。我的意思是,为了达到相同的效果,有必要引入作用域样式(从未正式介绍!)、固定定位和calc()等吗?实际上,这并不接近。我同意框架不时尚。但是,让我们停止因为“我们不这样做”而抛弃很多好东西。 - dkellner
你是否考虑过使用iframe来实现同样的目的,因为它是一种当前支持的方式?我很想知道你是否遇到了任何只能通过框架完成而无法轻松使用iframe完成的事情。 - Sean the Bean
这取决于你的意图。有些事情使用旧的框架方法更容易实现,而不必跳过障碍。一个例子是调整框架的大小和位置。(虽然我多年来没有这样做的需要。) - Rick Paul
它们仍然被所有主要浏览器支持,但不适用于CSS,并且对移动友好性会带来一些麻烦(RD)。 - Jake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接