为什么人们仍然使用iframe?

对于我来说,iframe是纯粹的邪恶(好吧,也许不是那么纯粹)。 他们似乎造成了很多麻烦。 是的,您的整个网站将加载一次,然后您可以只加载一个页面。 但是人们为此发明了AJAX。

我发现与iframe最大的问题之一,我不能粘贴到其中一个子页面的链接,因为URL永远不会改变(是的,我知道这是一个解决方法)。 第二件事情,networkingsearch引擎可能有问题,正确的索引该网站。

有时这些网站的可访问性会更差,有些浏览器甚至可能会显示不正确。

没有(i)帧,有更好的方法来devise布局。 每天我都可以看到有人问这个问题,比如“如何使用jQuery访问iframe?”。

那么iframe有什么好处? 还有什么理由继续使用它们? 我只想知道为什么:)

(因为这不是一个真正的问题,它是一个CW)

我可以想出两个原因(目前)为什么人们仍然会使用iframe而不是AJAX:

1)Iframes规避跨域来源策略(图片,脚本和样式不)。 这可以相对安全地从其他域名拉入网站/内容。 基本上,这使得能够直观地显示来自其他域的数据,而不会让他们无限访问(像JSONP所能做的那样)遍布整个页面。

2)你可以从一个iframe中加载多种types的资源,而不仅仅是某些MIMEtypes(你相对局限于application / javascript,application / x-javascript,text / css,text / xml,image / png,image / jpeg,带脚本的图像/ gif,XHR,图像和来源)。 例如,如果我想向您展示PDF,我可以打开一个iframe,让Adobe Reader插件显示您的文件。 另外,在同一个域中,如果我想要将脚本,样式和图像一起pipe道化(内联在页面上,图像必须是数据URI),那么可以使用iframe来完成此操作(如果它在相同的域,端口和协议,我也可以通过JavaScript访问它)。

您知道Gmail是一组iframe吗? 可见的部分只是巧妙的定位。 此外,许多OAuth实现(Twitter,Facebook,Google,Yahoo!)通常使用iframe将其域中的用户与成功的身份validationURL(用于login后)关联起来。

如果用户禁用了javascript,那么当ajax没有时,iframe就会工作。 考虑到人们使用NoScript这样的东西,这不是不可能的。

IFRAME用于将第三方内容embedded和隔离到网站中。

大多数networking广告解决scheme都基于iframe,因为它们在屏幕上提供安全性(跨域策略)和孤立的矩形,可以由第三方内容和脚本完全pipe理(常见用例是广告)。

IFRAMES的另一个现代用途是AJAX应用程序的历史pipe理(通用后退button解决方法)。

帧是差的版本的IFRAMES。 他们的使用正在下降。

我在ajax网站上使用它们,当我需要上传文件而无需重新加载页面。

使用它们有很多技术上的原因(特别是Dan Beam提到的安全问题)。

你不应该做的是使用iframes“像框架”,通过更新iframe只做导航到新的页面。 正如你所说,这阻止了导航书签/链接,响应正常的导航button,并提供有用的链接function,如开放新标签。

但是这不是iframes特有的。 通过使用XMLHttpRequest获取新内容并将其写入主内容div的innerHTML您可以看到越来越多的页面进行导航。 通常这是用jQuery load()和巧妙的幻灯片animation完成的。 这导致了与iframe中使用的框架一样严重的导航,或者甚至是老派的框架。 这是一个耻辱,许多networking作者使用这种策略相信它是一个超现代的网页devise方法,当它真的只是昨天被鄙视的框架集的一个新的皮肤。

你可以在两种情况下解决它,但这意味着你必须在#片段标识符部分存储一个视图状态,并支持正确的散列导航,这是不平凡的。 即使如此,你仍然遇到像search引擎这样的非JS代理的问题。 你最终不得不平行? 基于和#的导航来支持两者。 这是一个痛苦,最不打扰。

我仍然看到大型公司使用的内嵌框架提供了一个单一的标志,在这个标志上注明了经过authentication的用户的头部信息,然后通过iframe将其传递给实际的应用程序。 由于围绕iframe的“入口”处理所有特定的authentication细节,这些应用程序背后的应用程序不需要每个实现,使开发团队更容易,并有一个地方来监视和调整authentication细节的用户。

除了其他原因,我在我的应用程序中有一个具体的iframe用法。 不幸的是,在我的情况下,目标浏览器是Internet Explorer 6 。 我需要有一个页脚和一个页眉,这些页面在我的网页中都是固定的。 这个页面的主要部分是可滚动的。

但是, IE6中存在一个错误 ,我无法在使用z-index CSS属性的select元素的顶部显示div元素。 因此,我需要创build一个将用作黑客的iframe来避免这个问题。

当然,这是一个非常具体的iframe使用情况,只关心IE6

从HTML 5开始,框架集已经过时了,有时候你需要在一个站点内有另一个站点的框架。 另外AJAX只能做这么多。 尝试通过不带iframe的https将file upload到另一个域上的站点。 AJAX不会帮助你。

我正在build立一个社交networking,我发现iframes可以让小部件在其他人的网站上显示出来,像迷你个人资料一样显示,或者与远程服务器上的内容集成。 看起来像build立这个最简单的方法。 我知道一些小部件使用JavaScript。 此外,使用iframe方法,会话与正常访问网站相同,非常适合button。

Javascript所见即所得编辑器使用iframes,因为这是最简单也是最好的方式。 例如TinyMCE使用它:

http://tinymce.moxiecode.com/

许多格式化的文本编辑器(例如TinyMCE,HTMLArea)都是以iframe的forms实现的。

在某些情况下,iFrame可以作为X域请求,或者通过参数将数据发布到源。 但是当我想跨域访问数据时,我更喜欢使用CSS文件 – 他们可以接受参数,设置cookie,向页面添加内容(:之前&:之后)并给出一个视觉反馈。