设置 kind="subtitles" 是启用字幕轨道的关键,但必须搭配正确拼写、srclang 和 label 属性,并在 Safari 中用 JS 设置 track.mode = "showing" 才能生效。

设置 kind="subtitles" 是让浏览器识别并启用字幕轨道的关键一步,但光写对值远远不够——它必须和其它属性配合使用,否则轨道会被静默忽略。
必须用标准拼写,且不能留空
浏览器只接受三个合法值:"subtitles"、"captions"、"descriptions"。常见错误包括:
- 写成
kind="subtitle"(少一个 s)或kind="subtitiles"(拼错)→ 整条<track></track>被丢弃 -
kind=""或直接不写kind属性 → 浏览器不注册该轨道,video.textTracks里查不到 - 误用
kind="chapters"或kind="metadata"→ 它们不参与字幕渲染,菜单不会显示,JS 也无法控制显示
搭配 srclang 和 label 才算完整
kind="subtitles" 单独存在只是语义声明,实际切换、匹配语言、用户选择都依赖另外两个属性:
-
srclang是 JS 定位轨道的唯一依据,比如srclang="zh"或srclang="en";写成"zh-CN"或"ch"可能导致textTracks[i].srclang匹配失败 -
label是播放器菜单里显示的名字,缺失时所有中文字幕都只显示“字幕”,无法区分简体/繁体/粤语等 - 同一
kind下多个轨道(如两个中文字幕),必须靠srclang + label组合唯一标识,否则 JS 切换逻辑会出错
移动端 Safari 特别严格,default 不起作用
iOS/iPadOS Safari 加载 <track></track> 后,即使写了 default,也不会自动启用任何轨道——track.mode 默认是 "disabled":
立即学习“前端免费学习笔记(深入)”;
- 原生字幕按钮默认隐藏,用户根本看不到菜单
- 必须用 JS 主动遍历
video.textTracks,找到目标轨道后设track.mode = "showing" - 设之前务必检查
track.readyState === 2(已加载完成),否则无效 - 如果
kind不是"subtitles"或"captions",Safari 直接跳过加载(连onload都不触发)
正确示例写法
以下代码可直接使用,支持多语言、兼容主流浏览器(含 Safari):



















