禁用字幕需移除default属性并设track.mode = 'disabled';仅移除default不足,因浏览器可能因srclang匹配等自动启用,旧版Safari尤需在loadedmetadata后显式设置。

track 元素默认启用时如何禁用字幕
HTML 中的 <track></track> 元素本身没有“关闭”状态,它是否显示字幕完全由其 kind 属性、srclang、default 属性以及用户代理(浏览器)的字幕设置共同决定。所谓“关闭字幕”,本质是让浏览器不渲染该 track —— 最直接有效的方式是移除 default 属性,并确保没有其他逻辑(如 JS)主动启用它。
为什么加了 default 还不显示字幕
常见误解是只要写了 default 就一定出字幕,其实不然。以下任一条件不满足,字幕都不会自动出现:
-
kind="subtitles"或kind="captions"(不能是descriptions、chapters等) -
srclang值与浏览器当前语言设置匹配,或显式设为srclang="und"(未指定语言) - 视频元素未被静音且处于可播放状态(部分浏览器在静音/自动播放受限时会抑制字幕)
- 用户未在系统或浏览器设置中全局禁用字幕(如 Chrome 的
chrome://settings/captions)
用 JavaScript 动态关闭 track 字幕
如果页面已加载并启用了字幕,需通过 track 的 mode 属性控制。它的合法值只有三个:"disabled"、"hidden"、"showing"。真正“关闭”的操作是设为 "disabled":
const track = document.querySelector('track[kind="subtitles"]');
if (track) {
track.mode = 'disabled'; // ✅ 关闭字幕,不再响应用户切换或默认逻辑
}
注意:track.mode = 'hidden' 仍保留 track 的解析和时间轴处理,只是不渲染;而 'disabled' 会彻底停用,性能更优。
立即学习“前端免费学习笔记(深入)”;
容易被忽略的兼容性细节
某些旧版 Safari(≤15.4)对 track.mode 的初始值处理不一致:即使没写 default,也可能因 srclang 匹配而默认激活。此时仅靠 HTML 移除 default 不够,必须在脚本中显式设 mode = 'disabled' 并在 loadedmetadata 事件后执行,否则可能被浏览器覆盖。



















