iframe 框架有哪些优缺点
优点:
缺点:
补充
补充:iframe 把一个独立文档嵌入到当前页面里,等于在页面里再开一个完整的浏览器上下文,所以它的优缺点都来自"独立但又必须协作"这个特性。
优点
- 隔离性强:iframe 内的页面与父页面相互独立,CSS / JS / DOM 默认不互相污染,天然适合做"沙箱",比如富文本编辑器、第三方组件、广告位
- 加载第三方内容简单:可以加载任意第三方完整页面,父页面只需要关心容器尺寸
- 并行加载:iframe 的加载通常不阻塞主页面的渲染(旧的实现里可能阻塞)
- 天然的微前端边界:早期 iframe 是实现"多团队页面共存"的简单方案,跨域通信通过
postMessage - 独立历史栈:每个 iframe 拥有自己的浏览历史,刷新 / 后退互不影响
- 异步表单提交:早期会把表单提交到隐藏 iframe,避免整页刷新(AJAX 出现后这种用法大幅减少)
缺点
- SEO 不友好:iframe 内的内容对搜索引擎可见性差,关键内容应避免放在 iframe 里
- 阻塞 onload:iframe(包括样式、脚本、图片)的加载会阻塞主页面的
load事件,影响首屏指标 - 浪费性能:每个 iframe 都相当于一个完整的文档环境,DOM、JS 引擎、内存开销叠加,移动端尤其明显
- 样式 / 脚本无法直接共享:父页面样式和变量默认进不到 iframe,反之亦然,必须靠 postMessage 通信
- 跨域限制:受同源策略约束,跨域 iframe 不能直接读取 DOM/Cookie/Storage
- 可访问性问题:读屏软件对 iframe 支持参差不齐,关键交互不推荐放在 iframe 里
- 历史 / 前进后退混乱:嵌套太深会破坏用户的浏览器历史预期
- 样式不一致:iframe 内的页面要独立维护,移动端需要单独做响应式
替代方案
现代前端里很多 iframe 场景已经被替代:
- 广告 / 嵌入第三方页面 →
<iframe>仍然是首选 - 微前端 → Module Federation、qiankun、micro-app、wujie
- 富文本编辑器 → 直接基于 contenteditable / ProseMirror / TipTap
- 异步上传 → fetch / XHR + FormData
来源整理自:我的有道云笔记



