未出现在右键字幕菜单中,主因是浏览器未将其识别为有效轨道:位置错误(非直接子元素或在前)、kind非"subtitles"、srclang非法、label为空,四者缺一即静默失效。

video 里
不是浏览器“不支持”,而是它根本没把那个 当成有效轨道。常见原因有四个,缺一就静默失败:
-
没写在内部,或插在前面 → 浏览器直接跳过解析 -
kind属性值不是"subtitles"(比如写成"subtitle"、"captions"或漏写)→ 字幕 UI 不会暴露该轨道 -
srclang不是合法 BCP 47 码(如"chinese"、"zh-CN"错拼为"zh_CN")→ 匹配逻辑失效,default也白加 -
label为空 → 菜单里显示(no label),多语言场景下无法区分,常被误认为“没加载”
控制台报 Failed to load resource 但没具体路径
这是 加载失败的典型表现,但错误信息极其简略。真正卡点往往不在 HTML 写法,而在服务端或协议层:
- 本地用
file://协议双击打开 HTML → 所有src请求被浏览器拦截,必须起本地服务(如python3 -m http.server) - 服务器没配置
Content-Type: text/vtt→ Chrome/Safari 直接忽略,Firefox 可能报 MIME 类型不匹配但不显眼 - 跨域请求但服务端没返回
Access-Control-Allow-Origin: *→ Firefox/Edge 静默失败,Chrome 控制台可能只标红不提示 CORS - 路径大小写错误(如
zh.vtt写成ZH.VTT)→ Linux 服务器上 404,但错误日志里不体现
VTT 文件内容合规但字幕仍不显示
WebVTT 容错率为零,错一个字符整段 cue 就丢弃,且无任何警告。重点检查三处:
- 首行必须是顶格、全大写、无空格、无 BOM 的
WEBVTT(webvtt、WebVTT、带 UTF-8 BOM 都不行) - 时间戳格式严格为
00:00:01.234 --> 00:00:04.567:小时/分钟/秒两位,毫秒三位,箭头前后各两个空格,不能多也不能少 - 文件编码必须是 UTF-8 无 BOM:Windows 记事本默认带 BOM,务必用 VS Code 或 Notepad++ 保存为 “UTF-8 无签名”
字幕菜单里能看到选项,但点击后不显示文字
菜单存在说明 HTML 和 VTT 基本过关,问题出在运行时状态或浏览器行为差异:
-
default属性不可靠:用户只要点过一次字幕开关,后续刷新就不再生效;Safari 私密模式下甚至不解析default - 视频尚未触发
loadedmetadata事件就尝试操作textTracks→video.textTracks.length为 0,JS 无法定位目标轨道 -
mode设错值:只能是"disabled"、"hidden"或"showing";设成"show"或""无效,且不会报错 - Safari 对
kind="captions"不启用字幕 UI,即使写了default—— 必须用kind="subtitles"
真正容易被忽略的是:所有检查都得在 loadedmetadata 之后做。哪怕 DOM 已就绪,video.textTracks 在此之前仍是空集合,任何基于它的判断或操作都是徒劳。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











