iframe是否被认为是“坏习惯”?
我认为使用内联框架是“不好的做法”的概念。
这是真的? 使用它们有什么优点/缺点?
和所有技术一样,它有起伏。 如果你使用iframe来绕开一个正确开发的网站,那当然是不好的做法。 不过有时iframe是可以接受的。
iframe的主要问题之一是与书签和导航有关。 如果你使用它来简单地在你的内容中embedded一个页面,我认为这很好。 这是一个iframe的用途。
不过,我也看到了滥用iframe的情况。 它不应该被用作网站的组成部分,而是作为网站内容的一部分。
通常,如果你可以做到这一点,没有一个iframe,这是一个更好的select。 我相信这里的其他人可能有更多的信息或更具体的例子,这一切都归结于你正在努力解决的问题。
这就是说,如果你仅限于HTML,并没有像PHP或ASP.NET等后端的访问,有时一个iframe是你唯一的select。
他们不是不好的做法,他们只是另一种工具,他们增加了灵活性。
作为一个标准的页面元素使用…他们是好的,因为他们是一个简单而可靠的方法来分离内容到多个页面。 特别是对于用户生成的内容,将内部页面“沙箱”放入iframe
可能会很有用,所以糟糕的标记不会影响主页面。 缺点是,如果你引入多层滚动(一个用于浏览器,一个用于iframe
),你的用户会感到沮丧。 就像adzm说的,你不想为主导航使用iframe
,但是把它们想象成相当于video或其他媒体文件embedded方式的文本/标记。
对于脚本后台事件,select通常是在隐藏的iframe
和XmlHttpRequest
之间为当前页面加载内容。 不同之处在于iframe
生成页面加载,因此您可以在大多数浏览器中在浏览器caching中前后移动。 请注意,在各地使用XmlHttpRequest
Google在某些情况下也会使用iframe
来允许用户在浏览器历史logging中前后移动。
在不理解缺点的情况下使用它们是“不好的做法”。 Adzm的post总结得非常好。
另一方面,gmail在后台使用了一些较酷的function(如自动file upload),大量使用iFrames。 如果你知道iFrames的限制,我不认为你应该对使用它们有任何的担忧。
在许多情况下与他们合作,我真的认为iframe是goto语句的web编程等价物。 那就是一般要避免的事情。 在一个网站,他们可以有所作为。 但是,跨网站,除了最简单的内容外,几乎总是一个糟糕的主意。
考虑可能性…如果用于参数化内容,他们已经创build了一个接口。 而在专业网站上,该界面需要SLA和版本pipe理 – 在急于上网时几乎总是被忽略。
如果用于活动内容 – 承载脚本的框架 – 则有(不同的)跨域脚本限制。 有些可能被黑客攻击,但很less一致。 而如果你的框架内容需要互动,那么在框架之外这样做会很困难。
如果与许可内容一起使用,则参与站点需要移动主机之间的授权信息。
所以,尽pipe在一个站点中偶尔有用,但它们却不适合混搭。 你更好看真实的门户和portlet。 更糟糕的是,他们是每个业余爱好者的宠儿 – 许多技术经理已经把他们作为解决许多问题的方法。 事实上,他们创造更多。
根据我的经验,在调用第三方代码时,iframe的积极方面可能涉及调用一个调用了Document.write();
的JavaScript Document.write();
命令。 正如你可能知道的,这些命令不能被asynchronous调用,因为它是如何被parsing的(DOMparsing器等)。 一个这样的例子是http://sourceforge.net/projects/phpadsnew/我已经使用iframe来帮助加快我们的网站,因为有多个电话phpadsnews和网站正在等待响应之前,继续呈现不同页面的一部分。; 与一个iframe,我可以让网站呈现页面的其他部分,仍然asynchronous调用phpads的Document.write()
命令。 防止和jslocking。
iframes的人有绝对的用途。 你怎么会把天气networking小部件放在你的页面上? 唯一的办法就是抓住他们的XML并parsing它,但是当然你需要一些条件来抛出令人难以置信的天气graphics…不是真的值得,但如果你有时间的话更干净。
原来的框架模型(Frameset和Frame-elements)从可用性的angular度来看是非常糟糕的。 IFrame拥有一个后来的发明,它没有像原始框架模型那样多的问题,但是它也有其缺点。
如果允许用户在IFrame内导航,则链接和书签将无法按预期工作(因为您将外部页面的URL标记为书签,而不是iframe的URL)。
我已经看到,IFRAME非常成功地应用于制作dynamic上下文菜单,但该Web-app的目标受众只是Internet Explorer用户。
我想说这一切都取决于你的要求。 如果您希望确保您的网页在每个浏览器上都能正常工作,请避免使用IFRAME。 如果你的目标是一个狭隘的,知名的观众(例如在本地的内联网上),你会发现使用IFRAME的好处,那么我可以说这样做是可以的。
值得注意的是,无论用户的互联网连接速度还是iframe的内容,iframe都会导致一个小的(0.3s左右),但是页面下载的速度明显放慢。 这在本地testing时不会看到。 实际上,对于添加到页面的任何元素都是如此,但iframes似乎更糟。
当您的主页面加载HTTP协议,并且您的页面部分需要以HTTPS协议工作时,iFrame可以击败jsonp。
尤其是,如果你的数据types不是本地的json,需要在服务器上转换成json,并在客户端翻译成复杂的html。
所以nope – iFrame不是邪恶的。
他们并不坏,但实际上有帮助。 前段时间我有一个很大的问题,我不得不embedded我的Twitter饲料,它不会让md在同一页面上,所以我把它放在一个不同的页面,并把它作为一个iframe。
它们也很好,因为所有浏览器(和电话浏览器)都支持它们。 只要你正确地使用它们,它们不能被认为是不好的做法。