收到关于此的矛盾信息,希望他们不是。我无法想象对它的支持会停止,因为有大量网站使用它们。
一些额外的问题:
- 他们为什么要逐步淘汰这个标签?
- 有什么替代方案吗?
对 HTML 5 的支持<iframe>
仍然存在,所以我认为这在不久的将来不会改变。
要回答您的其他问题:
<iframe>
s(通常作为框架)大多数时候对用户不友好:
<div>
需要明确的是:我说<iframe>
的是界面元素。不是用于加载其他内容的隐藏元素,例如 Google Mail。
在我看来,W3C 从 Strict HTML 和 XHTML doctypes 中转储 iframe 是抢先一步。从理论上讲,您可以使用该<object>
元素将外来对象添加到您的文档中,但是浏览器的差异和限制使得这对许多开发人员来说是不可能的。随着更加实用的 HTML 5(仍是草案),iframe 又回来了,甚至有两个新属性:seamless
和有趣的sandbox
.
IFrame 并没有过时,但使用它们的原因很少见。
使用 iframe 的原因:
我还要回答说没有必要删除 iframe,它是一个需要的标签,并且会存在一段时间。
对于页面布局,iframe已过时。永远不要使用它们来代替良好的 CSS 布局,即使是基于表格的布局也更好。
使用 iframe 的充分理由是:
我已经看到很多论坛建议使用 Object 标记作为 IFrame 的替代品,这可能在大多数情况下都有效。
例如,我有一个在 IFrame 中显示的 PDF(因为除了 PDF 之外,我们还需要在页面上显示其他内容)并且能够使用 Object.
什么是:
<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe>
成为:
<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" height="570" width="480">
<p>[Show this message if displaying the PDF did not work]</p>
</object>
但是 Object 不是一个合适的替代品来满足只能打印页面的 PDF 部分的要求。
IFrame 就像它自己在页面中的窗口(基本上是窗口中的窗口),一旦获得窗口对象,就可以在其上调用 .print() ,例如:
jQuery("#confirmed_pdf").contentWindow.print();
IFrame 具有 contentWindow 属性,这使得仅打印该部分成为可能。Object 没有 contentWindow 属性,因此无法仅打印页面的部分。
因此,似乎如果您只是使用 IFrame 来显示某些内容,则可以使用其他标签(例如 Object)来代替。但是如果您需要以某种方式与 IFrame 的内容进行交互,那么 IFrame 可能是必需的。
IFrames are not dead, but Frameset/Frames are dying.
In the last 2 releases of IE (IE7/IE8) zooming in Frames (not IFrames) has created disastrous results.
By all means use IFrames, but IMHO stay clear of Framesets/Frames.
IFrame 经常与 AJAX 一起使用。例如,我相信 GMail 使用了九个隐藏的 IFrame。
在我以前的公司,我们提供了一个托管应用程序,客户可以将其集成到他们自己的网站中。有时,他们会使用 IFrame 来执行此操作,将我们托管的页面安装到他们现有的设计中。有时这甚至可以无缝完成(即 IFrame 没有边框或滚动条,它看起来就像页面的一部分)。我认为这是对标签的一个很好的使用。
它们在某些情况下可能非常有用,但这些是有限的。特别是跨多个站点嵌入通用功能。
例如,我有一个客户,他经营着许多苏格兰商品电子商务网站。作为其中的一部分,我们开发了几个简单的应用程序,可以根据您的姓氏或您选择的格子呢(如果您愿意,可以傻笑,但格子呢每年对我们的经济价值 7 亿美元)来定位可能的氏族名称。这背后的数据库非常大(核心名称和格子表中有近一万行)并且相当定期更新。
因此,我们将应用程序设置为在一个网站上运行,然后使用 iframe 将它们嵌入到我们的其他网站中,从而实现简单的 javascript 参数传递,因此我们可以将格子呢或部落的选择与嵌入网站上的功能集成在一起。iframe 设置为无边框,因此对最终用户来说完全无缝。
当然还有其他方法可以做到这一点,但是 iframe 的使用既简单又健壮。而且它肯定不会过时。
用于课程的马... <iframe> 就像其他任何东西...出于正确的目的,它们是正确的工具;出于错误的目的,它们是丑陋的黑客,或者更糟。
在 Ajax 中,<div> 通常是更合适的容器。在某些地方,由 <iframe>s 支持的将外部内容作为您自己网站的一部分的行为是不合适的。
前几天,我的团队使用 <iframe> 作为让用户访问其 HTML 电子邮件历史记录的理想方式 - 电子邮件是完整的 <html> 页面,我们希望将其轻松插入到我们的 Web 模板中。<iframe> 非常适合呈现该数据]'。
另一方面,<iframe> 几乎总是应该在任何用户提交的输出回网站的内容中被删除或禁用,因为在这种情况下,它们是一个主要的安全问题。
The google gadget specification currently relies on iframes: http://code.google.com/apis/gadgets/docs/spec.html
Currently they are the only simple way to provide isolation for javascript apps that are pulled from multiple domains/providers.
Also many of the widgets that people embed on their websites from third-parties use iframes.
While they do have their drawbacks, iframes provide a pragmatic solution to common problems on the web. I'd have to guess that they will be around for some time to come.
合规性和安全性问题也可能促使您使用 iframe;购物车是流行的基于 IFrame 的实现,当您希望在视觉上将购物车合并为某些网页的一部分而不对事物的支付处理方面承担全部责任时。
我们通常会提供一个 iframe 来整合我们的电子商务产品和客户,例如它的交钥匙方式。
我在一家公司工作,该公司将框架用于下拉菜单、列表、内容块等所有内容,以涵盖 .net Web 表单的复杂性。该应用程序非常慢,只能在 IE 上运行。不要这样做。