使用 iframe 是不好的做法吗? iframe 可以像画布一样被翻译成图像吗?

Posted

技术标签:

【中文标题】使用 iframe 是不好的做法吗? iframe 可以像画布一样被翻译成图像吗?【英文标题】:Is it bad practice to use iframes? Can iframes be translated into images in the same way canvases can? 【发布时间】:2014-08-26 22:15:34 【问题描述】:

我在互联网上看到很多关于不使用框架的投诉,使用框架被认为是不好的做法,而且它们已经过时了。

但是,iframe 并没有过时,而是框架。使用它们是否被认为是不好的做法?

此外,iframe 是否可以像画布一样渲染为 data:png/base64 或其他格式?

【问题讨论】:

好吧,如果你在 iframe 中有一个画布.. :D 您可以截取 iFrame 并将其渲染为图像 =) iframe 的问题在于 SEO - 搜索引擎可能会链接到 iframe,而不是链接到您的页面。在我看来,这不是坏习惯。据我所知,您无法将其转换为图像,但您可以使用 ajax 获取它的内容,并将其放入任何块对象(如 div)中。 对于 SEO 问题,我可以使用 robots.txt 另见[链接] (***.com/questions/362730/…) 【参考方案1】:

但是,iframe 并没有过时,而是框架。使用它们是否被认为是不好的做法?

有时您必须将单独的 html 文档嵌入到另一个文档中,这没关系。作为记录,HTML5 有一整节专门用于嵌入外部内容,其中一个相关元素是iframe (W3C HTML5)。

当然,某件事是好的还是坏的做法也很大程度上取决于您的用例,但最佳实践问题本质上往往相当广泛。

另外,iframe 是否可以像画布一样渲染为 data:png/base64 或其他格式?

事实上,是的,虽然IE does not appear to support data:text/html at the moment:

<iframe src="data:text/html,<!DOCTYPE html><html><body><p>abc"></iframe>

然而,这不是“正确”的做法(甚至验证器也不同意语法是否有效——W3C 的 Nu 验证器似乎不喜欢 data:text/html,因为所有的 HTML 符号,而 Validator. nu 只抱怨 DOCTYPE 中未编码的空白)。要嵌入原始 HTML,您需要使用新的 srcdoc 属性而不是 src(具有 even less browser support):

<iframe srcdoc="<!DOCTYPE html><html><body><p>abc"></iframe>

因此,一般来说,为 iframe 指定原始 HTML 目前是个坏主意,即使浏览器开始支持 srcdoc 属性,您也应该在带有 src 属性的数据 URI 上使用它。

【讨论】:

嗯,关于数据,我的意思是专门将 iframe 渲染为 base64 编码图像。对我来说似乎不可能。 @Doge:考虑到 iframe 的本质是动态 HTML 页面而不是静态图形图像,我不完全确定它首先会如何工作......【参考方案2】:

在我看来,使用 iframe 时要考虑的最大问题是您可能包含的 3rd 方网站的安全问题。

例如,在 iframe 中包含来自第 3 方的内容。如果该第 3 方已被黑客入侵,那么您现在正在将您的用户从您自己的站点中直接暴露给该漏洞。事实上,对于您的用户来说,漏洞在于您的网站(他们可能不知道 iframe)。

【讨论】:

【参考方案3】:

iframe 的使用是 Selenium QA 面试测试中的常见测试项目。 使用正确的命令让 Selenium 可以在 iframe 中找到内容可能会很棘手,并且在开发测试自动化时会引起一些混乱。

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。

以上是关于使用 iframe 是不好的做法吗? iframe 可以像画布一样被翻译成图像吗?的主要内容,如果未能解决你的问题,请参考以下文章

不使用 IFrame 的原因?

管理系统一般都是使用iframe吗,用它的优势和劣势在那里

请指教html的iframe 相关问题?

asp.net 一个页面有两个iframe 在代码中可以控制第一个iframe的Attributes["src"] 但是第二个就不好用了

微信jssdk可以在iframe生效吗

<iframe>内的内容可以控制吗?