srclang 属性在 kind="subtitles" 时必须存在且符合 ISO 639-1 标准(如 zh、en),否则字幕轨道会被浏览器静默忽略;它仅声明语言,不负责文件可达性,需确保 src 可访问且返回 text/vtt 类型。

srclang 属性不是可选的“锦上添花”,当 kind="subtitles" 时,它必须存在,否则字幕轨道会被浏览器静默忽略——哪怕 src 路径完全正确、文件内容语法无误。
为什么浏览器不显示字幕?先查 srclang 是否缺失或格式错误
常见现象:视频控件里看不到字幕开关,或者打开后字幕空白,控制台也无报错。根本原因常是 <track> 缺少 srclang,或用了非法值(如 zh-CN、english、空格、大写)。srclang 只接受两个字母的 ISO 639-1 语言代码(如 en、zh、no、fr),不区分大小写但不能带连字符或地域后缀。
- ✅ 正确:
srclang="zh"、srclang="EN" - ❌ 错误:
srclang="zh-CN"(这是lang属性用法)、srclang="Chinese"、srclang="" - ⚠️ 注意:Firefox 和 Safari 对缺失
srclang更严格,Chrome 有时会“宽容”但行为不可靠
srclang 和 label 的分工必须清晰
srclang 是机器可读的语言标识,用于浏览器匹配系统语言、启用自动切换;label 是用户可见的名称,纯属 UI 层面。两者语义不同,不能互相替代。
- 浏览器根据
srclang决定是否默认启用某轨道(尤其配合default属性时) -
label可以是任意字符串,比如label="简体中文(校对版)",但不会影响语言识别 - 若多个轨道
srclang相同(如都写zh),浏览器可能只加载第一个,其余被忽略
动态设置 srclang 要注意 DOM 时机和兼容性
通过 JS 修改已挂载的 <track> 元素的 srclang,需确保元素已插入文档且媒体元素已加载元数据(loadedmetadata 事件后更稳妥)。
立即学习“前端免费学习笔记(深入)”;
- ✅ 安全写法:
trackEl.srclang = "ja";(直接赋值,无需 setAttribute) - ❌ 无效写法:
trackEl.setAttribute("srclang", "ja");—— 多数浏览器不响应此方式 - ⚠️ 兼容限制:IE9 及更早版本、Safari 15.6 之前、部分旧版 Firefox 不支持 JS 动态修改
srclang,建议降级为重新插入<track>节点
真正容易被忽略的是:即使所有属性都写对了,如果字幕文件本身返回 HTTP 404 或 MIME 类型不是 text/vtt(服务端未配置),srclang 也救不了——它只管“语言声明”,不管“文件可达”。先确保 src 能直连访问并返回 200 + 正确 Content-Type,再排查 srclang。



















