cuechange事件需绑定在<video>元素上,由启用且已加载的<track>触发;须确保kind为subtitles/captions、src有效、mode="showing"、readyState≥2,再监听并遍历activeCues处理多字幕。

网页视频不能直接在 `
确保 track 元素配置正确
这是前提,缺一不可:
- kind 属性必须是 `"subtitles"` 或 `"captions"`(若用于业务逻辑,也可用 `"metadata"`,但不会显示)
-
src 指向有效的 WebVTT(.vtt)文件,且服务器返回正确的 MIME 类型(
text/vtt) -
mode 设为 `"showing"`(不是 `"disabled"` 或 `"hidden"`),可通过 JS 动态设置:
track.mode = 'showing' -
readyState ≥ 2(
TextTrack.LOADED),表示字幕已加载完成;可在load事件或轮询readyState后再启用监听
监听 cuechange 并读取当前字幕
在 `
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 使用
video.addEventListener('cuechange', handler),不要绑定到 ` - 每次触发时,通过
video.textTracks[i].activeCues获取当前激活的 cue 列表(注意是类数组,不是单个对象) -
activeCues.length可能为 0(无字幕)、1(常见单行)或多个(如双语、分屏字幕),需遍历处理 - 每个 cue 对象含
.text(字幕文本)、.startTime、.endTime等属性
处理加载延迟与空 cue 场景
页面加载快于字幕加载时,`activeCues` 可能为空或未定义:
- 在事件回调中加防御性判断:
if (!track || !track.activeCues || track.activeCues.length === 0) return - 推荐在 `textTracks[0].onload` 或检查 `readyState === 2` 后再绑定 `cuechange` 监听器
- 若需兼容旧浏览器,可同时监听 `load` 事件并手动触发一次检查
多 cue 同时激活的典型情况
WebVTT 支持同一时刻多个 cue 生效(例如左屏中文、右屏英文):
- 不要只取
activeCues[0],应使用for (const cue of track.activeCues)遍历 - 可按
cue.text内容做区分,或结合cue.id(如果 VTT 文件中定义了)识别用途 - 若用于时间点业务逻辑(如弹题、跳转),建议统一用 `

















