iframe 框架有哪些优缺点

优点:

缺点:

补充

补充:iframe 把一个独立文档嵌入到当前页面里,等于在页面里再开一个完整的浏览器上下文,所以它的优缺点都来自"独立但又必须协作"这个特性。

优点

  1. 隔离性强:iframe 内的页面与父页面相互独立,CSS / JS / DOM 默认不互相污染,天然适合做"沙箱",比如富文本编辑器、第三方组件、广告位
  2. 加载第三方内容简单:可以加载任意第三方完整页面,父页面只需要关心容器尺寸
  3. 并行加载:iframe 的加载通常不阻塞主页面的渲染(旧的实现里可能阻塞)
  4. 天然的微前端边界:早期 iframe 是实现"多团队页面共存"的简单方案,跨域通信通过 postMessage
  5. 独立历史栈:每个 iframe 拥有自己的浏览历史,刷新 / 后退互不影响
  6. 异步表单提交:早期会把表单提交到隐藏 iframe,避免整页刷新(AJAX 出现后这种用法大幅减少)

缺点

  1. SEO 不友好:iframe 内的内容对搜索引擎可见性差,关键内容应避免放在 iframe 里
  2. 阻塞 onload:iframe(包括样式、脚本、图片)的加载会阻塞主页面的 load 事件,影响首屏指标
  3. 浪费性能:每个 iframe 都相当于一个完整的文档环境,DOM、JS 引擎、内存开销叠加,移动端尤其明显
  4. 样式 / 脚本无法直接共享:父页面样式和变量默认进不到 iframe,反之亦然,必须靠 postMessage 通信
  5. 跨域限制:受同源策略约束,跨域 iframe 不能直接读取 DOM/Cookie/Storage
  6. 可访问性问题:读屏软件对 iframe 支持参差不齐,关键交互不推荐放在 iframe 里
  7. 历史 / 前进后退混乱:嵌套太深会破坏用户的浏览器历史预期
  8. 样式不一致:iframe 内的页面要独立维护,移动端需要单独做响应式

替代方案

现代前端里很多 iframe 场景已经被替代:

  • 广告 / 嵌入第三方页面 → <iframe> 仍然是首选
  • 微前端 → Module Federation、qiankun、micro-app、wujie
  • 富文本编辑器 → 直接基于 contenteditable / ProseMirror / TipTap
  • 异步上传 → fetch / XHR + FormData

来源整理自:我的有道云笔记