HTML 内嵌框架
<iframe> 用于在当前页面中嵌入另一个独立的 HTML 文档。
基本语法
html
<iframe src="https://example.com" width="600" height="400"></iframe> 常用属性
| 属性 | 说明 |
|---|---|
src | 嵌入页面的 URL |
width / height | 框架尺寸 |
title | 框架的描述(无障碍必需) |
allowfullscreen | 允许全屏(用于视频嵌入) |
loading="lazy" | 延迟加载,等用户滚动到附近才加载 |
sandbox | 安全沙箱,限制权限 |
<iframe> 必须有 title 属性,否则屏幕阅读器用户不知道该区域的内容是什么。
常见场景
嵌入 YouTube 视频
html
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/dQw4w9WgXcQ"
title="YouTube 视频播放器"
allowfullscreen
></iframe> 嵌入地图
html
<iframe
src="https://www.google.com/maps/embed?pb=..."
width="600"
height="450"
style="border:0;"
allowfullscreen=""
loading="lazy"
title="公司位置地图"
></iframe> 嵌入 CodePen / 代码演示
html
<iframe
height="300"
style="width:100%;"
src="https://codepen.io/..."
title="代码演示"
></iframe> 安全与 sandbox
iframe 可以加载任何网页,这可能带来安全风险。sandbox 属性限制 iframe 内页面的行为:
html
<iframe src="untrusted-content.html" sandbox></iframe>
<!-- 空的 sandbox 施加所有限制 -->
<iframe src="widget.html" sandbox="allow-scripts allow-same-origin">
</iframe>
<!-- 只放开脚本和执行同源请求 --> | 值 | 允许的行为 |
|---|---|
| (空) | 几乎禁止一切 |
allow-scripts | 运行 JavaScript |
allow-same-origin | 视为同源 |
allow-forms | 提交表单 |
allow-popups | 弹出窗口 |
srcdoc — 内联 HTML
不通过 URL 加载,直接在属性中写 HTML 内容:
html
<iframe srcdoc="<h1>Hello</h1><p>内联 HTML 内容</p>" width="300" height="200">
</iframe> 过多 iframe 会严重影响页面性能——每个 iframe 都是独立的渲染上下文。使用 loading="lazy" 可以缓解。对于性能要求高的场景,尽量用原生的 HTML/CSS/JS 实现,而不是嵌入多个 iframe。