IFrame (HTML) 是不是已过时? [关闭]
Posted
技术标签:
【中文标题】IFrame (HTML) 是不是已过时? [关闭]【英文标题】:Are IFrames (HTML) obsolete? [closed]IFrame (HTML) 是否已过时? [关闭] 【发布时间】:2010-10-19 20:09:22 【问题描述】:收到关于此的矛盾信息,希望不是。 我无法想象对它的支持会停止,因为有无数网站在使用它们。
关于此的一些其他问题:
-
他们为什么要逐步淘汰这个标签?
有什么替代方案吗?
【问题讨论】:
它们并没有过时:softwareengineering.stackexchange.com/questions/144515/…。替代品***.com/questions/8702704/… 这有什么更新吗?这个问题在2009年被问及回答;现在是 2020 年。 【参考方案1】:IFrame 并没有过时,但使用它们的原因很少见。
使用 IFrame 来提供您自己的内容会在访问该区域的内容周围创建一堵“墙”。 For crawlers like Google, It's not immediately clear that cotent in an iframe will be ranked as highly as if the content were simply part of the page. 对许多人来说,这就是不使用它的充分理由。 它使 IFrame 的 DOM 不太容易被 jQuery、原型等工具访问。使用 iframe 的原因:
它非常适合将其他人的东西与其他域隔离开来,但它不能顺利集成。 (样式表、javascript 等...) 与使用嵌入标签相比,有时通过 iframe 可以更轻松地集成多媒体。 非常专业的案例,例如 gmail 的案例,他们将其用于声音和历史管理。我还要回答说没有必要删除 iframe,它是一个必需的标签,并且会存在一段时间。
【讨论】:
【参考方案2】:AJAX 经常使用 IFrame。以 GMail 为例,我相信它使用了九个隐藏的 IFrame。
【讨论】:
我数了五个 iframe。一个没有隐藏,事实上,其中一个几乎就是整个视图。 IFrame 通常不与 Ajax 一起使用(无论如何不在任何主要框架中)。 Gmail 将 iframe 用于以下方面:历史跟踪、声音(奇数)和某种画布绘图。 我只是在看几年前读过的一篇文章。【参考方案3】:html 5 中仍然支持<iframe>
,所以我认为这在不久的将来不会改变。
回答您的其他问题:
<iframe>
s(通常作为框架)大多数时候对用户不友好:
它们不允许通过 URL 轻松访问框架中的内容(至少不会丢失框架外的内容)。
大多数“技术恐惧症”用户都对框架感到恼火。
据我所知,它们在浏览器上的渲染速度较慢
替代方案包括动态页面生成(SSI、php、Rails 等)和使用 JavaScript / AJAX 更改内容,例如一个<div>
明确一点:我说的是<iframe>
作为一个界面元素。不是用于加载其他内容的隐藏元素,例如谷歌邮件可以。
【讨论】:
+1 表示 Google 将 iframe 用于高度专业化的目的。【参考方案4】:iframe 已过时用于页面布局。永远不要使用它们来代替良好的 CSS 布局,即使是基于表格的布局也更好。
使用 iframe 的充分理由是:
ads:例如 adwords 使用这种技术,它有利于封装 - 广告 css 不会破坏您的页面。 隐藏 iframe:它可以用于数百个可用的东西,例如跟踪、ajax-alternative 等。【讨论】:
*** 请勿将 iframe 用于 adwords,这违反了 TOS。 ***scribd.com/doc/97655/… altCognito:AdWords 使用 iframe,而不是我 :) 我不是说将 adword iframe 放入另一个 iframe。 我知道这是一个常见的错误(因此所有的文章),所以我想标记它以确保人们理解你在说什么。 在包含必须从另一个域提供的复杂内容时,必须使用 Iframe,并且不得使用当前页面的 CSS 或 JS 代码进行操作。 您所说的与 iframe 无关。要点是 - 您使用 iframe 引入嵌套的外部浏览上下文。您不会将它用于“页面布局”。如果我需要一个嵌套的浏览上下文 - 我将如何使用“好的 CSS 布局”来代替?这没有意义。【参考方案5】:在我以前的公司,我们提供了一个托管应用程序,客户可以将其集成到他们自己的网站中。有时,他们会使用 IFrame 来执行此操作,将我们托管的页面融入他们现有的设计中。有时这甚至可以无缝完成(即 IFrame 没有边框或滚动条,它看起来就像页面的一部分)。我认为这是对标签的一种很好的利用。
【讨论】:
Iframe 是处理您需要以自己的风格和 Javascript 放入客户网站的东西的必备工具,这样用户的代码就不会被破坏。 CSS 可以很容易地被覆盖,而 JS 有时会导致冲突(在极少数情况下),因此它最适合“封闭系统”方法。【参考方案6】:它们在某些情况下可能非常有用,但它们是有限的。尤其是跨多个站点嵌入通用功能。
例如,我有一个客户,他经营着许多苏格兰商品电子商务网站。作为其中的一部分,我们开发了几个简单的应用程序,可以根据您的姓氏或您选择的格子呢(如果您愿意,可以傻笑,但格子呢每年对我们的经济价值 7 亿美元)来定位可能的氏族名称。这背后的数据库非常大(核心名称和格子表中有近一万行)并且相当定期更新。
因此,我们将应用程序设置为在一个网站上运行,然后使用 iframe 将这些应用程序嵌入到我们的其他网站中,从而实现简单的 javascript 参数传递,这样我们就可以将格子呢或部落的选择与嵌入网站上的功能集成在一起。 iframe 设置为无边框,因此对最终用户来说是完全无缝的。
当然还有其他方法可以做到这一点,但 iframe 的使用既简单又可靠。而且它肯定不会过时。
【讨论】:
【参考方案7】:IFrames 没有死,但 Frameset/Frames 正在死。
在 IE (IE7/IE8) 的最后 2 个版本中,放大 Frames(不是 IFrames)造成了灾难性的后果。
请务必使用 IFrame,但恕我直言,请不要使用 Framesets/Frames。
【讨论】:
【参考方案8】:在我的意见中,W3C 急于从 Strict HTML 和 XHTML 文档类型中转储 iframe。从理论上讲,您可以使用<object>
元素将外来对象添加到您的文档中,但是浏览器的差异和限制使得这对许多开发人员来说是不可能的。随着更加实用的 HTML 5(仍然是草案),iframe 又回来了,甚至还有两个新属性:seamless
和有趣的sandbox
。
【讨论】:
太棒了,我只是希望浏览器开始支持 AJAX 文件上传,这样我们就不需要使用 iframe 或 flash。 @Xeoncross Firefox 和 chrome 做:developer.mozilla.org/en/Using_files_from_web_applications 更新:semless 属性已从 html5 中删除。见:caniuse.com/#feat=iframe-seamless【参考方案9】:Google 小工具规范目前依赖 iframe:http://code.google.com/apis/gadgets/docs/spec.html
目前,它们是为从多个域/提供商提取的 javascript 应用程序提供隔离的唯一简单方法。
人们从第三方嵌入到其网站的许多小部件也使用 iframe。
虽然 iframe 确实有其缺点,但 iframe 为网络上的常见问题提供了实用的解决方案。我不得不猜测他们会在未来一段时间内出现。
【讨论】:
【参考方案10】:我在一家公司工作,该公司将框架用于下拉菜单、列表、内容块等所有内容,以涵盖 .net 网络表单的复杂性。该应用程序非常慢,只能在 IE 上运行。不要这样做。
【讨论】:
【参考方案11】:课程用马......
在 Ajax 中,
通常是更合适的容器。在某些地方,由【讨论】:
【参考方案12】:合规性和安全性问题也会促使您使用 iframe;购物车是一种流行的基于 IFrame 的实现,当您希望在视觉上将购物车合并为某些网页的一部分而不承担支付处理方面的全部责任时。
我们通常会提供一个 iframe 来集成我们的电子商务产品和客户,例如它的统包性。
【讨论】:
【参考方案13】:我看到很多论坛都建议使用 Object 标签替代 IFrame,这在大多数情况下可能都有效。
例如,我在 IFrame 中显示了一个 PDF(因为除了 PDF 之外,我们还需要在页面上显示其他内容)并且能够使用 Object.
什么是:
<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" ></iframe>
成为:
<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" >
<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 可能是必需的。
【讨论】:
以上是关于IFrame (HTML) 是不是已过时? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 vue.js 是不是使 jQuery 过时? [关闭]