html4 的 标签已过时,无语义、不可访问、不被 html5 承认;应统一用 替代,其支持多格式、原生控件、js api 和无障碍。

HTML4 的 <embed></embed> 标签在现代浏览器中仍能“工作”,但属于非标准、无语义、不可访问、不被 HTML5 规范承认的遗留用法,不建议继续使用;HTML5 中应统一使用 <video></video> 标签替代视频插件场景。
为什么 <embed></embed> 不该再用了
它最早是 Netscape 的私有扩展,HTML4 未定义,HTML5 明确将其列为“只允许用于向后兼容的特殊情况”——也就是说,仅当嵌入 Flash、QuickTime 等已淘汰的插件时才可能被动支持,且行为完全依赖浏览器厂商实现,没有统一属性、无事件规范、无法键盘操作、屏幕阅读器基本不可读。
- 常见错误现象:
<embed src="demo.mp4"></embed>在 Chrome/Firefox 中可能偶然播放,但无控件、无autoplay响应、load()方法不存在 - 兼容性陷阱:Safari 对
<embed></embed>的 MIME 类型校验更严格,常静默失败;Edge(Chromium 版)虽兼容但会触发控制台警告"embed is deprecated" - 移动端几乎全部失效:iOS Safari 和 Android WebView 默认禁用所有插件,
<embed></embed>直接不渲染
<video></video> 是唯一推荐的 HTML5 替代方案
它原生支持 MP4(H.264)、WebM(VP9/AV1)、OGG(Theora),具备完整播放控制、字幕轨道、JavaScript API 和无障碍支持,无需任何插件。
- 基础用法必须包含
src或<source></source>子元素,否则不触发加载 - 关键属性:
controls(显示原生控件)、preload="metadata"(避免首屏卡顿)、playsinline(iOS 全屏限制绕过) - 不要依赖单格式:MP4 兼容性最好,但需搭配 WebM 提供开源编码 fallback
<video controls preload="metadata" playsinline> <source src="demo.mp4" type="video/mp4"> <source src="demo.webm" type="video/webm"> Your browser does not support the video tag. </video>
旧项目迁移要注意的硬坑
直接替换 <embed></embed> 为 <video></video> 不等于万事大吉,尤其当原逻辑依赖插件生命周期或自定义 UI 时:
立即学习“前端免费学习笔记(深入)”;
-
<embed></embed>的width/height是内联尺寸,<video></video>需显式设 CSS 或属性,否则默认 300×150 像素 - Flash 场景中常用的
flashvars参数,在<video></video>中需转为 JavaScript 初始化(如设置currentTime、监听timeupdate) - 若原
<embed></embed>加载的是流媒体(如 RTMP),<video></video>无法直接支持——必须改用 MSE(Media Source Extensions)+<video></video>,或切 HLS(hls.js)/DASH(dash.js)方案
真正麻烦的从来不是标签怎么写,而是旧系统里那些没文档的 Flash 参数映射、自动播放策略适配、以及 iOS 上静音 autoplay 的兜底逻辑——这些不会因为换了个标签就自动消失。










