kind属性仅接受“subtitles”“captions”“descriptions”“chapters”“metadata”五个严格大小写敏感的固定值,填错(如“subtitle”“Subtitles”或空值)将导致轨道失效且无控制台提示。

kind 属性不是随便填的字符串,它直接决定浏览器是否识别这条轨道——填错值(比如 subtitle、zh 或空值),轨道就彻底失效,且控制台零提示。
kind 只接受五个固定值,填错等于没写
浏览器只认 "subtitles"、"captions"、"descriptions"、"chapters"、"metadata" 这五种,大小写敏感,多一个空格都不行。常见错误包括:
- 写成
subtitle(少 s)或Subtitles(首字母大写)→ 被忽略 - 用语言代码代替类型,如
kind="zh-CN"→ 无效 - 漏写
kind属性(哪怕写了srclang和label)→ 不进textTracks列表
不同 kind 的行为差异极大,不能混用
同一 kind 值在同一媒体元素中只能启用一条轨道(比如两个 kind="subtitles",用户只能手动选其一)。更重要的是,各类型用途和渲染逻辑完全不同:
-
kind="subtitles":面向懂音频语言但需翻译的用户,显示在画面上,可开关 -
kind="captions":含声音描述(如「[电话铃响]」),专为听障设计,也显示在画面上 -
kind="descriptions":纯辅助技术用,由屏幕阅读器读出,不渲染到 UI -
kind="chapters":提供时间戳导航菜单,不显示字幕文本,依赖 WebVTT 中的CHAPTERS类型 cue -
kind="metadata":供 JS 读取的隐藏数据,完全不参与用户界面
default 属性对非显示类 track 毫无意义
default 只影响首次加载时是否自动显示(仅对 subtitles 和 captions 有效),而 descriptions、chapters、metadata 本来就不靠“显示”工作:
立即学习“前端免费学习笔记(深入)”;
- 加了
default的kind="descriptions"轨道,不会让屏幕阅读器自动朗读 -
kind="chapters"即使有default,也不会让章节菜单默认展开 - 多个
track都写default→ 只有第一个生效,其余被静默丢弃
验证是否生效,别只看 HTML 是否写对
写对 kind 是前提,但真正加载失败往往卡在后端或文件本身:
- 打开浏览器 DevTools → Elements 面板,确认
track确实是video或audio的**直接子元素**(不能包在div里) - 运行
document.querySelector('video').textTracks.length,返回 0?说明track没注册成功,优先检查kind值和嵌套位置 - 返回 >0 但字幕不出现?接着查 WebVTT 文件开头是否为
WEBVTT(全大写、无空格)、服务器是否返回Content-Type: text/vtt
最易被忽略的是:WebVTT 文件必须是 UTF-8 无 BOM + LF 换行,本地编辑器看着正常,上传后换行符变成 CRLF 或带 BOM,就会静默失效。



















