根本原因是元素未被浏览器纳入DOM树,因其必须作为或的直接子元素且位于之后、其他内容之前;若位置错误、父元素不符或协议为file://,则虽在控制台可见却不可访问、length为0。

为什么 元素在控制台里显示但 length === 0
根本原因不是 JS 没读到标签,而是浏览器压根没把它纳入 DOM 树—— Elements 面板中看到 浏览器对 生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力:
- 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面;
- 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”;
- 提及位于 `apps/console/src/featur 真正卡住人的往往不是语法错误,而是 必须作为 或 的**直接子元素**,且必须出现在媒体元素内容区的最前面(即在任何 之后、 或文本之前)。如果位置错、父元素不对、或被包裹在 document.querySelectorAll('track') 返回空数组,video.textTracks.length 也是 0。
不是普通 HTML 元素,它不会渲染成节点,只在媒体元素上下文中激活 → 完全无效,连解析都不会进 media 的 track 列表 → 被忽略( 后再不能有其他子元素)
video.textTracks 始终为空?检查加载时机和 src 是否就绪 是惰性加载的:即使 DOM 结构完全正确,只要 的 src 还没设置、或还没触发 loadstart,所有 textTrack 都处于 disabled 状态,且 video.textTracks.length 可能仍为 0。这不是 bug,是规范行为。
video.src 已赋值且非空(哪怕只是占位符 data:video/mp4,)DOMContentLoaded 时就读 video.textTracks,要等 video.readyState >= 1 或监听 loadedmetadata 事件type="subtitles" 的 track 必须配 srclang 才会被浏览器计入可用列表(Chrome/Firefox 均如此)text/vtt,track 会静默失败,textTracks 里依然没有它控制台里能看到
但点不开?用 getKind() 和 mode 验证状态 标签,不代表它已激活。右键该标签 → “Break on” → “attribute modifications”,然后手动调用 video.textTracks[0].mode = 'showing',看是否触发断点;或者直接在 Console 里运行:const video = document.querySelector('video');
console.log(video.textTracks); // 查看实际长度和每个 track.mode
console.log(Array.from(video.textTracks).map(t => ({kind: t.kind, srclang: t.srclang, mode: t.mode})));
mode 值为 'disabled' 表示未启用;'hidden' 表示已加载但未显示;'showing' 才真正在播字幕kind 必须是合法值:'subtitles'、'captions'、'descriptions'、'chapters'、'metadata',拼错就进不了列表 的 srclang 不能重复,否则后一个会覆盖前一个(尤其动态插入时)VTT 文件加载失败却不报错?手动 fetch 验证网络和响应头
加载失败是静默的——控制台不报 404,Network 面板里甚至可能不显示请求。这是因为它走的是内部 track loader,不走常规 fetch 流程。
vtt,刷新页面,确认是否有该请求及状态码 根本没被识别(结构/位置问题);若有但 404,检查路径大小写、服务器是否配置了 text/vtt MIME 类型fetch('xxx.vtt').then(r => r.text()).then(console.log) 手动验证:能取到内容,证明路径和权限 OK;取不到,说明问题出在网络或服务端file:// 协议)时,VTT 加载必然失败(跨源限制),必须走 HTTP 服务(如 http://localhost:8080) 在 DOM 中“存在但不可达”——它既不在 querySelectorAll 结果里,也不进 textTracks 列表,更不触发任何报错。每一步都要验证:位置对不对、父元素对不对、src 设没设、VTT 能不能直连访问、协议是不是 file://。漏掉其中任一环,它就彻底隐身。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










