html5不支持frame标签,它已被彻底移除;浏览器解析时静默忽略或退入怪异模式,w3c验证报错,dom中不生成节点,且无法通过无障碍检测。

iframe 是现代可用的嵌入方案,frame 已被 HTML5 废弃,直接用会触发验证错误甚至不渲染。
HTML5 是否还支持 frame
不支持。frame 和 frameset 标签在 HTML5 中被完全移除。浏览器虽大多仍能解析(出于兼容性),但:
• document.createElement('frame') 在部分环境返回 null;
• W3C 验证器报错 Element “frame” not allowed here;
• Chrome / Firefox 的 DevTools 会标记为“deprecated”,且不显示其 DOM 节点属性;
• 使用 frame 会导致页面无法通过无障碍检测(如 axe)。
iframe 可以独立存在,frame 必须嵌套在 frameset 中
这是最实际的布局差异:
• iframe 可以直接写在 里,也能动态插入、替换、销毁,比如:
<br><iframe src="content.html" width="100%" height="400"></iframe><br>
•
frame 不能出现在 内,必须包裹在 <frameset></frameset> 中,且该 <frameset></frameset> 会替代整个 —— 意味着你不能再用 <script></script>、<div> 或任何常规内容;<br>• 若误把 <code>frame 放进 ,多数浏览器会静默忽略,或只在旧 IE 中勉强渲染。
iframe 支持跨域通信与 sandbox 控制,frame 几乎没有安全机制
iframe 提供了明确的隔离与协作能力:
• 通过 sandbox 属性可禁用脚本、表单提交、插件等,例如:<iframe sandbox="allow-scripts" src="third-party.html"></iframe>;
• 跨域时可用 postMessage() 安全通信,主页面和子页面需双方配合;
• iframe.contentWindow 在同域下可直接访问,跨域则抛出 SecurityError;
• frame 没有 sandbox、referrerpolicy、csp 等现代安全属性,也无法可靠监听加载完成(load 事件行为不一致)。
为什么你看到的“多页共用导航”模板还在用 frame?
那基本是遗留系统或老教程的产物,常见于 2010 年前的后台管理模板(如某些 jQuery admin UI)。它们依赖 frameset 实现左侧菜单固定、右侧内容刷新的效果,但代价明显:
• URL 不同步:点击菜单后地址栏不变,无法书签、前进/后退失效;
• SEO 彻底丢失:搜索引擎只抓取 frameset 页面,看不到 frame 内容;
• 移动端适配困难:frameset 无响应式能力,缩放/滚动行为混乱;
• 现代替代方案更轻量:用 iframe + History API 或前端路由(如 React Router / Vue Router)就能实现同样效果,且 URL、状态、SEO 全可控。











