使用 iframe 是不是一个好的用法(good practice),不能一概而论,但是可以肯定是,现在的大部分网站避免采用这种方式的。iframe 一直是浏览器标准规范之一,只有很早期的浏览器不支持 iframe,现在几乎已绝迹。所以从兼容性上来说,iframe 是没问题的。
那么现在什么时候会用到 iframe 呢?
因为 iframe 的页面和父页面(parent)是分开的,所以它意味着,这是一个独立的区域,不受 parent 的 CSS 或者全局的 JavaScript 的影响。 典型的,比如所见即所得的网页编辑器(WYSIWYG Online HTML Editor),因为它们需要 reset 自己的 CSS 到自己的标准,而不被 parent CSS 的 override。
说到上面一点了,顺便说一下,知乎的这个编辑器不是用 iframe,它使用了一种叫 contentEditable 的属性,用来启用页面元素的编辑,在早期版本 IE 下不支持的。
正是因为刚刚提到的 iframe 等于新建了一个全新的,不受 parent 影响的页面上下文,所以在一定程度上,类似于沙箱隔离(sandbox)。
除此之外,如果有可以不用 iframe 来解决的问题,还是避免使用 iframe。 替代方案一般就是动态语言的 include 机制、ajax 动态填充内容,以及以后会普及的 contentEditable。 所以如果你需要独立的浏览上下文,那么就用 iframe,否则就不用。 历史上,iframe 常被用于复用部分界面,但是多数情况下并不合适。 现在,应该使用 iframe 的例子如: 1. 沙箱隔离。 2. 引用第三方内容。 3. 独立的带有交互的内容,比如幻灯片。 4. 需要保持独立焦点和历史管理的子窗口,如复杂的Web应用。 注:登录弹窗用 iframe 未必合适。HTML标准新增了dialog元素,可能更适合。