视频挂上字幕后控制台报 Access to text track at 'https://cdn.example.com/sub.vtt' from origin has been blocked by CORS policy,字幕一条都不显示。日志里能对上时间点,这种反而好排。
track 的 src 指向另一个域名,响应里没有 Access-Control-Allow-Origin,浏览器直接拒绝加载。video 标签也没加 crossorigin,请求不带 Origin 头。这一点先确认清楚,后面就不用反复试。
<video crossorigin='anonymous' controls> <track kind='subtitles' src='https://cdn.example.com/sub.vtt' srclang='zh' label='中文'> </video>
「track 字幕跨域」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。改完隔一天再看一次,当场正常不代表能稳住。
处理上按这个顺序:给 video 加 crossorigin=anonymous;字幕所在域返回 ACAO 头 允许站点域名;字幕存成 UTF-8 并确认 MIME 是 text/vtt。
结果对不对很好判断,播放器字幕菜单里出现中文轨道,选中后字幕正常显示,控制台没有 CORS 报错。
