javascript - 字幕轨道 HTML5 元素不会在视频中更新
问题描述
我遇到了一个问题,我需要从 javascript 动态更改字幕轨道源。
当前的行为是没有发生任何变化,并且旧字幕继续显示。
这是html:
<video style="width: 50%;" class="m-5" id="vid" controls>
<track src="oldPath.vtt" id="subtitleTrack" label="English" kind="subtitles" srclang="en" default />
</video>
这是Javascript:
let subtitleTrack = document.getElementById("subtitleTrack");
function subtitleEdited(newTrackPath) {
//....
subtitleTrack.src = newTrackPath;
//....
}
我需要一旦轨道源发生变化,新的字幕应该直接加载到视频中。
video.load()
我尝试再次加载视频,但在更改轨道源后添加它不起作用。
更新
经过进一步调查,问题似乎是由于缓存问题。我需要新路径是相同的旧路径(该路径在本地有新的更新)但是浏览器从缓存中获取他的副本而不从本地文件中更新它。__
第二次更新
感谢@Terry 的回复。
我尝试将版本控制添加到源中,但它什么也没得到。
检查响应大小,?v=2
响应为空。
PS该项目是电子项目。无论如何,我认为这不是问题的一部分。
解决方案
正如您在评论(和更新的问题)中提到的那样,您使用的是完全相同的轨道路径。这将导致浏览器从缓存中获取,因为文件路径没有改变:一个好主意是简单地向src
属性添加一个缓存破坏查询字符串,这样浏览器就会忽略缓存:
let subtitleTrack = document.getElementById("subtitleTrack");
function subtitleEdited(newTrackPath) {
//....
subtitleTrack.src = newTrackPath + '?t=' + new Date().getTime();
//....
}
当然,如果您更习惯使用模板文字,这可能更具可读性:
subtitleTrack.src = `${newTrackPath}?t=${new Date().getTime()}`;
推荐阅读
- php - 从 CDN 提供带有标头的 .APK 文件以安装在 Android 中
- ffmpeg - FFMPEG 将 HEVC 转换为 VP9 大文件大小
- sas - 如何通过汇总另一个变量来对 SAS 中的变量进行排名
- ios - ios 上没有移动 - aframe.io 示例运行,相同(?)代码不是?有什么不同?
- java - Oracle查询根据子表中的值过滤和排序表
- wordpress - 如何在更新版本> 5中取回wp admin中的先前/旧编辑器
- javascript - 如何将所有后代节点和链接设置为与 2 级祖先相同的颜色?
- java - STM32F746G-DISCO 的 MicroEJ UART 和其他 GPIO 中断
- image - 颤振:“(路径):不能为空”条件文件检查
- ios - Swift - 如何获得上传速度而不是下载速度?