HTML 框架与 iframe¶
frameset、frame 和 noframes 属于旧式框架页面技术,在 HTML5 中已经废弃。
现代页面不应使用它们布局;本页提及这些元素只为识别历史代码。
历史 frameset¶
旧文档曾用 <frameset> 替代 <body>,再用 <frame> 拼接多个页面。
这种方式会造成地址、历史记录、打印、收藏、焦点和无障碍问题。
不要在新项目中复制旧式 frameset 示例,也不要用表格模拟相同布局。
现代布局应使用语义元素配合 CSS Grid 或 Flexbox,参见HTML 布局。
iframe 的用途¶
iframe 仍是 HTML 标准的一部分,用于嵌入独立浏览上下文,例如受控地图、视频或预览。
<iframe
src="https://video.example.test/embed/lesson-1"
title="第一课:HTML 文档结构"
width="640"
height="360"
loading="lazy"
sandbox="allow-scripts allow-same-origin"
referrerpolicy="strict-origin-when-cross-origin"
allow="fullscreen">
</iframe>
title 与替代内容¶
每个 iframe 应有简洁、可区分的 title,说明嵌入内容的主题或功能。
页面还应在 iframe 外提供必要说明或可直接访问的链接。
不要把关键操作完全依赖第三方嵌入内容。
sandbox¶
没有值的 sandbox 会施加较严格限制,再按需要添加令牌放宽能力。
常见令牌包括 allow-forms、allow-scripts、allow-downloads 和 allow-popups。
只授予业务所需的最小权限,不要机械复制宽松令牌集合。
对同源内容同时允许 allow-scripts 与 allow-same-origin 可能显著削弱隔离效果。
沙箱不是可信代码审计、响应头策略或独立源隔离的替代品。
权限与隐私¶
allow 属性控制摄像头、麦克风、全屏等特性策略权限。
不要授予未使用的敏感能力;第三方内容也会带来网络请求、追踪和可用性风险。
referrerpolicy 可限制发送给嵌入源的来源信息。
跨源边界¶
同源策略通常阻止父页面直接读取跨源 iframe 的 DOM。
跨窗口协作可使用 postMessage,但接收方必须核对 event.origin 和消息结构。
window.addEventListener("message", (event) => {
if (event.origin !== "https://widget.example.test") return;
if (event.data?.type === "ready") console.log("组件已就绪");
});
发送消息时应指定准确目标源,不使用不必要的 "*"。
检查清单¶
- 不在新页面使用已废弃的
frameset或frame。 - 为 iframe 设置准确、唯一的
title。 - 以最严格 sandbox 为起点,仅添加必要令牌。
- 限制特性权限、来源信息和第三方依赖。
- 验证
postMessage的来源与数据,不信任跨窗口输入。
下一篇:HTML 颜色。