系列:HTML 零基础入门到企业实战全套教程【连载系列】 定位:零基础友好、无门槛入门,从基础语法到企业规范、实战开发、兼容适配全覆盖,适合前端初学者、转行开发者、在校学生,全程配套代码案例,可直接上手实操 章节:第五章 多媒体与图片标签|丰富页面视觉内容 5.4 iframe
前言
前面我们学了 img、audio、video,用来展示图片、音频、视频资源。但很多业务场景,我们不是自己开发页面,而是直接把别人做好的页面、播放器、地图、在线文档嵌入到我们自己网页里 ,这个时候就要用到 <iframe> 内嵌框架标签MDN Web Do...。

iframe 直译是内联框架,你可以理解成:在当前页面开一个独立小窗口,窗口里面跑一套独立的网页,拥有独立的 DOM、独立 JS 上下文,天然隔离。企业开发里非常高频:官网嵌入地图、帮助页嵌入第三方表单、后台嵌入报表、博客嵌入视频等。
⚠️ 重点:iframe 是跨域隔离的,父页面和 iframe 内部默认不能直接互相访问 JS,这既是限制,也是安全保护。
一、基础语法与核心属性
基础语法
<iframe src="地址" title="内嵌内容说明"></iframe>
src:必填,嵌入资源地址(本地 html、第三方 url)title:企业规范强制推荐,给屏幕阅读器识别,无障碍要求,不要省略MDN Web Do...
高频常用属性(企业开发必记)
表格
| 属性 | 作用 |
|---|---|
width / height |
设置宽高,支持 px / 百分比;推荐用 CSS 控制更灵活 |
frameborder="0" |
去掉默认边框(旧属性,现在推荐 CSS border:none) |
loading="lazy" |
懒加载,iframe 进入视口才加载,优化页面性能,HTML5 新增 |
allowfullscreen |
允许内部内容全屏(视频播放器必备) |
sandbox |
沙箱,安全核心属性,限制 iframe 权限,防止恶意脚本 |
allow |
权限策略,控制是否允许自动播放、麦克风、摄像头等 |
referrerpolicy |
控制请求时是否携带来源 referer |
sandbox 重点讲解: 只写
sandbox不加值:最高限制,禁止脚本、表单提交、跳转、弹窗等; 需要权限时按需放开:
sandbox="allow-scripts":允许执行 JSsandbox="allow-forms":允许提交表单sandbox="allow-same-origin":允许同源(谨慎给第三方)sandbox="allow-top-navigation":允许 iframe 跳转父页面窗口
二、实战案例 1:嵌入本地网页(同域)
我们新建两个文件:index.html(主页面)、inner.html(被嵌入页面)
inner.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>内嵌子页面</title>
</head>
<body>
<h3>这是被iframe嵌入的本地页面</h3>
<p>同源页面,可以配置sandbox放开更多权限</p>
</body>
</html>
index.html 嵌入代码
<!-- 嵌入本地页面,设置宽高、懒加载 -->
<iframe
src="inner.html"
width="700"
height="300"
loading="lazy"
title="本地内嵌页面"
sandbox="allow-scripts">
<!-- 降级提示:浏览器不支持iframe时显示 -->
您的浏览器不支持iframe内嵌框架
</iframe>
提示:浏览器直接打开本地 html 文件时,部分浏览器本地文件策略会限制 iframe,建议用 VSCode Live Server 插件运行。
三、实战案例 2:嵌入 B 站视频(最常用场景)
很多博客、官网、教学页面嵌入视频,直接用 B 站提供的 iframe 播放器地址,不要直接复制浏览器地址栏链接,要用 player 播放器地址。
✅ 可直接运行示例:
<iframe
src="//player.bilibili.com/player.html?bvid=BV1R44y1T7Yd&page=1&autoplay=0"
width="800"
height="450"
allowfullscreen
loading="lazy"
title="B站演示视频"
sandbox="allow-scripts allow-same-origin">
浏览器不支持iframe
</iframe>
参数说明:
bvid:视频 BV 号page=1:选集autoplay=0:关闭自动播放(企业页面尽量关闭自动播放,体验更好)allowfullscreen:必须加,才能点全屏按钮
进阶:16:9 自适应视频(企业页面标准方案)
固定宽高在移动端会变形,用容器 + CSS 实现自适应,生产环境优先这套写法:
<style>
.iframe-video-box {
width: 100%;
max-width: 800px;
margin: 0 auto;
/* 16:9 核心技巧:padding-top = 9/16 = 56.25% */
position: relative;
padding-top: 56.25%;
}
.iframe-video-box iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
</style>
<div class="iframe-video-box">
<iframe
src="//player.bilibili.com/player.html?bvid=BV1R44y1T7Yd&page=1&autoplay=0"
allowfullscreen
loading="lazy"
title="自适应B站视频">
</iframe>
</div>
四、实战案例 3:嵌入地图(百度地图示例)
企业官网、门店页面经常嵌入地图,操作方式:百度地图开放平台,选地点 -> 分享 / 嵌入 -> 获取嵌入 iframe 代码,直接复制使用。
示例模板:
<iframe
src="https://map.baidu.com/xxx"
width="800"
height="400"
loading="lazy"
title="门店位置地图"
frameborder="0"
allowfullscreen>
</iframe>
注意:地图平台很多有配额、ak 密钥,上线前仔细阅读平台文档;部分地图接口会做域名白名单校验,本地打开可能空白,部署到服务器域名才能正常展示。
五、iframe 优缺点梳理(面试 & 企业评审常问)
✅ 优点
- 内容完全隔离,第三方代码不会轻易污染父页面 DOM、样式、JS
- 接入简单,一行代码接入视频、地图、表单、报表,不用自己开发
- 独立加载,可懒加载,拆分页面资源
- 跨团队、跨系统集成利器,后台系统嵌入其他子系统页面
❌ 缺点 & 坑点(重点避坑)
- 额外 HTTP 请求,多 iframe 会拖慢页面;优先
loading="lazy" - 跨域限制:父页面拿不到 iframe 内部 dom、JS 变量,通信只能靠
postMessage - 样式隔离:iframe 内部样式不受父页面 CSS 控制
- 安全风险最高 :嵌入未知第三方页面,很容易出现点击劫持、恶意脚本;不信任的第三方一定要严格配置
sandbox - SEO 不友好:搜索引擎很难抓取 iframe 内部内容,重要内容不要放在 iframe 里面
六、企业开发规范清单(划重点,写项目照着检查)
- 必须写
title属性,满足无障碍规范 - 第三方未知资源,强制加 sandbox,最小权限原则,不要直接给全权限
- 视频、地图优先加
loading="lazy",首屏外资源懒加载优化性能 - 视频播放器配置
allowfullscreen,关闭自动播放 - 自适应优先使用 CSS 容器方案,不要写死固定宽高,适配移动端
- 不要把核心业务文字、需要 SEO 的内容放进 iframe
- 不要嵌入来源不明的 iframe 地址;内部系统嵌入需要确认 X-Frame-Options 配置,部分站点禁止被 iframe 嵌入(会空白)Cyber.gov....
- 通信场景(父子页面传值)统一使用
postMessage,并且校验消息来源 origin,防止恶意消息
七、常见报错排查
- iframe 一片空白:大概率目标网站设置
X-Frame-Options:DENY,禁止被嵌套,换别的嵌入方案 - 视频无法全屏:缺少
allowfullscreen - 本地打开不生效:跨域 / 本地文件安全策略,用 web 服务启动
- 自动播放失效:现代浏览器策略,视频自动播放需要静音,业务上不推荐自动播放
小结
<iframe> 是 HTML 嵌入体系里非常实用的标签,它的本质就是独立浏览上下文窗口。零基础阶段掌握:基础语法、嵌入本地页面、视频、地图,学会 sandbox 安全控制、自适应写法,就能覆盖 80% 企业常规开发场景。