为什么不在页面内容中使用 iframe 的好理由

IT技术 javascript html iframe
2021-02-27 11:45:12

好的,所以我正在寻找一些很好的理由不在页面内容中使用 iFrame。我的朋友开始为我们的聊天框使用 iFrame 并加载一个 html 页面,而不是仅仅ajax用于加载所需的参数并长时间轮询请求。一旦我们有了参数,我们就用我们的内容填充一些 div。


我最大的理由

  1. 为什么同时加载两个页面

  2. 需要更多的代码来注入 iFrame

有没有人知道可能出现的任何其他可能的冲突和问题?我知道不久前 iFrames 应该被弃用,然后他们又跳回了网站。


ps 我不确定这是否应该进入 SO 或 MSO 如果需要我可以移动它

4个回答

来源:http : //www.rwblackburn.com/2012/07/iframe-evil/

所以似乎我从事的每一项工作,都会出现同样的话题。在某些时候,有人会说,“只需为此使用 iFrame”。然后我需要沿着旧的疲惫的道路走下去,为什么这不是一个好主意。

好吧,这篇文章对我来说有点实用。我希望将 iFrame 不是万能解决方案的所有原因都放在一个地方,这样我就可以在将来节省一些时间,并将人们指向这个 URL。因此,我可能会在完善这些要点时不时更新这篇文章。如果您愿意,请随意将这篇文章用于相同的目的,并将我遗漏的任何建议或要点张贴到我的twitter帐户 (@rwbDev),如果我将要点添加到本文中,我一定会感谢您。

现在,让我说清楚。iFrame 确实有一个有效的目的。我自己实际上已经多次使用 iFrame,并取得了巨大的成功。问题是人们倾向于使用它们来绕过糟糕的架构,或者只是解决问题。根据我的经验,这通常只是将一个小问题换成更大的问题,而且通常是不必要的权衡。我将在下面介绍这两点。

对 SEO 不利。这是您会发现避免使用 iFrame 的最普遍原因之一。某些搜索引擎可能难以处理 iFrame 中引用的页面。这对网站或页面的搜索排名有多大影响尚不完全清楚。然而,与我交谈过的大多数专家都同意它肯定会产生一些影响。看看这个关于热带的有趣表格帖子。有关 SEO 如何工作的详细信息,以及像这样的设计决策的影响,我建议查看 seomoz.org。如果您的页面或应用程序不关心 SEO,这当然不是问题。例如,需要登录的应用程序(无论如何,搜索引擎都无法访问登录后的所有页面)。* 注意(2013 年 6 月 6 日添加):最近的测试表明,搜索引擎实际上可能会跟踪 iFrame 中的链接。这意味着 iFrame 的 SEO 影响比过去小得多。目前还不清楚是否有影响,不同的搜索引擎在这方面可能表现不同。

链接/书签。除非您引入额外的 JavaScript,否则用户将无法直接获得 iFrame 中内容的链接。这包括某人可能通过电子邮件发送给朋友的链接、书签或出现在搜索引擎结果中的页面。想象一下您的用户访问您的页面,并且一些内容在 iFrame 中。他们单击 iFramed 内容中的链接。此内容将按预期保留在 iFrame 中。现在,您的用户在 iFrame 中找到了他们导航到的一些内容,并希望将其发送给朋友。但是在他们的浏览器中复制 URL 是行不通的,这只会将朋友发送到初始页面,原始内容显示在 iFrame 中。有一些脚本可以解决这个问题。我自己已经实现了几次(在我别无选择的情况下)。然而,这些通常会引入一些他们自己的问题,并且经常有跨浏览器的兼容性问题。通常它也是正确的越野车。同样,根据您的站点或应用程序的需求,这可能不是问题,但对于大多数站点来说这是一个大问题。

调试困难。这是人们经常忽略的一项。如果您有一个健壮的应用程序,其中包含复杂的 jQuery、Ajax 和整个页面中发生的其他很酷的东西——iFrames 会使调试问题变得更加困难。错误是发生在外页还是框架内的页面?浏览器开发人员工具可以帮助解决这个问题,但即使是这些工具,在您处理 iFrame 时也不一定能清楚地说明问题出在哪里。当页面位于 iFrame 内时,错误会被复制的频率如此之高,但在 iFrame 外加载时却能正常工作,您会感到惊讶。这是任何网站的问题。但特别是对于广泛使用 iFrame 的网站。系统中的活动部件越多,诊断问题就越困难。

没有真正的性能提升。偶尔我会找到想要使用 iFrame 的人,因为他们觉得这会提高他们网站的性能。他们通常会有这种感觉,因为这样可以避免在站点分页时重新加载站点的页眉/页脚/菜单。通常情况下,情况正好相反。事实上,根据我的经验,与修复应用程序的架构相比,它从未带来性能提升。首先,考虑浏览器将缓存图像、CSS 和 JS 文件。因此,无论如何这些都不会随每个页面重新加载。但更重要的是,按照这些思路思考的人经常将 iFrame 视为穷人的 AJAX。然而,iFrame 分页的内容几乎总是比真正的 AJAX 调用重,后者使用 XML 或 JSON 加载和刷新页面内容的一小部分。

只是很难保持稳定。我以前工作的一个大型站点广泛使用了 iFrame。我不确定 NDA 在这里适用于何处,因此为了安全起见,我不会链接到他们的网站。他们经常使用它们,并且拥有用于(理论上)避免使用 iFrame 的正常缺点的所有脚本和花哨的技巧。然而,由于 iFrame 的广泛滥用和过度使用,他们的网站上仍然经常出现问题和错误。在论坛、LinkedIn、Twitter 等上,也经常有客户抱怨这给他们带来的问题。刚才我跳转到他们的网站,几分钟后发现一个页面因为 iFrame 问题而给我一个错误。这些聪明人非常了解 iFrame 的问题。然而,即使他们在多年后仍继续与它搏斗。当 iFrame 像在本网站上一样被滥用时,

链接已死,这是一个更永久的链接:web.archive.org/web/20150214070809/http : //www.rwblackburn.com/...
2021-04-22 11:45:12

iframe 为页面上下文增加了灵活性,因为它们是一种将内容分离到多个页面的简单而可靠的方法。将内部页面“沙箱化”到 iframe 中也可能有用,这样糟糕的/缺失的标记就不会影响主页。

缺点是如果你引入多层滚动(一层用于浏览器,一层用于 iframe),用户会感到沮丧。

@EasyBB 我不同意。为什么 Facebook 是唯一获得通行证的实体?如果他们找到了合适的用途,其他“真正的程序员”肯定也能找到一个完全可以接受的理由来使用 iframe。
2021-04-17 11:45:12
这会增加页面的加载时间,并且有多种其他方式提供内容,例如DIVs 除了 Facebook 使用它的方法之外,没有真正的好目的。除此之外,他们网站的真正程序员不应使用 iFrame。请阅读已接受的答案
2021-04-21 11:45:12
我相信你错过了整个回应的重点和独创性。他们使用它,twitter使用,以及其他人。但他们不会通过滚动使您的页面过度拥挤。他们使用一个简单的按钮或其他类似的东西。所以我不认为你真的知道你的意思。
2021-04-29 11:45:12

某些浏览器不支持 iFrame,在 iFrame 中,您的网站上可能有您的内容,还有其他网站的内容,但内容可以随时更改为您可能同意或不同意的材料。空白的。阻止不需要的页面重新加载,而不是语义

除非您自己控制样式表,否则您无法让 CSS 在 IFrame 和父页面之间进行协作。如上所述,确实-

我们无法使用 I Frame 获得良好的性能,某些搜索引擎可能会遇到 i Frame 中引用的页面的问题。这对网站或页面的搜索排名有多大影响尚不完全清楚。我的建议是先简单地使用所有其他选项。不要只是跳到 iFrame 解决方案,因为它表面上看起来很简单。

还有一件事,Iframe setTimeout() 在 Internet Explorer 9 中不起作用!!
2021-05-02 11:45:12
哦,我从不使用 iFrame 哈哈。我宁愿长时间轮询ajax请求并在div中提供内容。页面上的语义元素。
2021-05-13 11:45:12

重要的原因是:

  • 性能较慢
  • iframe 阻止onload事件
    web 开发人员主要使用 onload 事件来启动 UI 操作,例如在加载时关注登录字段。