【问题标题】:Why are frames deprecated in html?为什么在 html 中不推荐使用框架?
【发布时间】:2011-05-14 21:25:04
【问题描述】:

HTML 从早期就有框架,但在最新版本中已弃用。许多浏览器(我曾尝试使用 Internet Explorer)甚至无法正确显示框架。

为什么要这样做?帧的缺点是什么?

【问题讨论】:

  • “最初”为假。但否则就是这样。
  • 嗯,问题是它们存在。 :)
  • 框架仍然有效。 Javadocs 仍然使用框架并在所有主要浏览器中可靠地呈现。此处示例:download.oracle.com/javase/7/docs/api
  • 我实际上使用框架,因为我不希望用户保存内部 url。我敢肯定,如今可能还有另一种方法可以做到这一点,但是如果您不学习新技巧,旧习惯就会很难改掉。
  • 框架在某些情况下非常有用:reframe.deneskellner.com 就是一个很好的例子。我当然可以在没有框架的情况下完成它 - 但这种方式非常简单和轻松。我不明白为什么当某些东西过时时,弃用是答案。

标签: html frames


【解决方案1】:

Jakob Nielsen 在 1996 年写了一篇专栏文章,上面写着 criticized frames。一些关键点:

  1. 框架会阻止用户正确地为页面添加书签。加载带有书签的框架集页面时,用户先前在框架内单击鼠标无关紧要。只保存外部 URL,用户必须手动导航到他们所在的位置。

  2. 框架对打印网页提出了挑战。一次打印所有框架不适合不同尺寸的纸张(用户只能通过这种方式获得第一页)。用户通常必须右键单击所需的框架并选择适当的上下文菜单选项。

  3. 如果来自搜索引擎的用户位于另一个框架中,他们可能无法访问导航元素 - 他们只会被定向到搜索引擎在其中找到文本的那个框架。

虽然“框架集”(1990 年代末/2000 年代初网页上最常用的类型)正在消亡,但 iframe(内联框架的缩写)仍然存在并且运行良好。事实上,最近发现 iframe 在当今的“mashup”Web 应用程序中很有用,并且目前在 HTML5 specification 中提出了对 iframe 的扩展。

例如,Facebook 在其面向应用程序开发人员的 API 中使用它们将第三方应用程序与他们自己的网站无缝集成,同时将安全风险降至最低。 (在此模型中,所有第三方代码都保留在单独的域中,这有利于安全。)

【讨论】:

  • 第三点我不是很明白。这是否意味着来自搜索引擎的用户将仅打开具有内容的页面而不是框架的索引页面。因此不会有所有链接(因为大多数链接将位于框架的其他部分,这是通常的做法)。
  • @SonOfTheEARTh:是的,我就是这个意思。
  • 第 1 点非常关键,但不幸的是,由于所有模板系统和 JS 都允许即时更改页面内容,有些页面又无法添加书签...
  • 1996 年是伟大的一年。从那以后发生了很多事情。今天,上述所有问题都可以轻松解决,没有任何痛苦。 1996年的理由大多无效。框架是实现您在网络上几乎随处可见的东西的一种选择。很多页面,从 Facebook 到 phpMyAdmin,看起来像框架,它们只是使用不同的标记实现。框架的唯一问题是无法跨框架边界写入;是的,这是一个缺点,但在某些情况下也是一种祝福。否则,没有真正好的理由反对框架。
  • 虽然这些信息可能很有趣,但我认为这并不能回答用户的问题。大多数(如果不是全部)尼尔森的反对意见也适用于 iframe。我认为这个问题在这里得到更好的回答:softwareengineering.stackexchange.com/questions/144515/…
【解决方案2】:

HTML 中的帧 are not deprecated。他们是obsolete in HTML 5,在这个版本之前只是discouraged。这已在指定链接中明确提及。

【讨论】:

  • 现在我们用 JavaScript 做同样的事情。太棒了。
  • 它们在 XHTML 中已被弃用,虽然与 HTML 4 的继承者意图不完全相同
  • @Ignacio Vazquez-Abrams:你说得对:如果使用“类似框架”,AJAX/HTTPRequest 在很多情况下会产生更多相同的问题!但这更多是因为缺乏开发人员知识而不是技术本身......
  • @tobyodavies:不,它们不是:框架在严格的 XHTML 中已过时,但并未弃用。但是,他们气馁^^
  • 使用哈希 URL 的状态机制确实避免了 PleaseStand 消息中提到的框架所造​​成的问题(例如,带有 ui-router 的 AngularJS)。
【解决方案3】:

不是回答 OP,而是平衡对框架集的抨击。

我发现它们很棒,当您希望菜单完好无损时,没有什么能比得上它们了:

  • 可视化合并 3 方页面/应用程序(phpmyadmin 或类似)
  • 查看 html 以外的文档类型(pdf 或图像)。
  • 由于它的 width="x,*",您会得到一个简单的“响应式”行为。

此外,您可以在获取主要内容时提供流畅的菜单动画。

合理使用,它们非常棒。

【讨论】:

  • 没错。而对于那些不喜欢镜框的人来说,有一种古老的印度魔法叫做“不使用镜框”。像魅力一样工作,让其他人享受框架的好处。我是说,真的。有范围样式(从未正式引入!)和固定定位和 calc() 以及一切只是为了达到相同的效果是否有意义?事实上,哪个甚至不接近?我同意框架不流行。但是,让我们停止仅仅因为“我们不那样做”而把很多好东西扔到窗外。
  • 您是否考虑过使用 iframe 作为当前支持的实现相同目的的方式?有兴趣知道您是否遇到过任何可以使用框架完成但无法像使用 iframe 一样轻松完成的事情。
  • @SeantheBean 这取决于您的意图。使用旧的 Frame 方法可以更轻松地完成某些事情,而无需跳过障碍。一个例子是调整框架的大小和位置。 (不过,我已经好几年没需要这样做了。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 2017-11-04
  • 2011-10-22
  • 2011-04-11
  • 2021-10-12
  • 2012-12-07
  • 2012-05-16
相关资源
最近更新 更多