最准确判断字幕轨道是否激活的方式是检查 track.mode 值:disabled(关闭)、hidden(解析但不显示)、showing(激活且可见);需结合 kind 为 subtitles 且 mode === 'showing',并确保 track.readyState === 2。

直接看 track.mode 的值是最准确的方式。它明确反映该轨道当前是否被启用并显示。
track.mode 的三种状态含义
每个 元素在 JS 中对应一个 TextTrack 对象,其 mode 属性有且仅有三个合法值:
-
disabled:轨道完全关闭,不解析 cue,不触发
cuechange,也不会显示 - hidden:cue 被解析、可监听事件,但不显示在画面上(常用于后台提取字幕文本)
-
showing:轨道已激活,cue 正在渲染,用户可见,
activeCues可读取
不能只依赖 default 或 srclang 判断
default 属性仅影响页面加载时的初始行为,不代表当前状态;srclang 只是语言标识,和启用与否无关。即使写了 default,Safari 和部分浏览器仍默认设为 disabled,必须靠 JS 显式设置 mode = 'showing' 才真正激活。
安全判断当前激活轨道的方法
遍历 video.textTracks,检查每个轨道的 kind 和 mode:
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
const activeTrack = Array.from(video.textTracks).find(
track => track.kind === 'subtitles' && track.mode === 'showing'
);
if (activeTrack) {
console.log('当前激活字幕语言:', activeTrack.srclang); // 如 'zh' 或 'en'
}
注意:需确保轨道已加载完成(track.readyState === 2),否则 mode 可能尚未生效或被重置。
UI 同步与常见陷阱
用户通过右键菜单切换字幕时,mode 会实时更新,但不会触发 textTracks 的事件。因此 UI 按钮状态应主动轮询或监听 textTracks.onchange(兼容性较好)或使用 MutationObserver 监听 DOM 变化来响应。
不要用 track.language 判断——它可能为空或未同步,始终以 srclang 为准。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










