在前端页面中嵌入HTML视频时,经常会出现视频文件更新后,浏览器仍然加载旧缓存内容的情况,导致用户无法看到最新的视频内容。这时就需要通过JavaScript的方式清除视频缓存并重新加载,下面介绍几种常用的实现方法。

方法一:修改视频地址追加随机参数
浏览器的缓存机制是基于资源URL判断的,只要URL发生变化,就会重新请求资源而不是读取缓存。因此可以在视频的源地址后面追加随机参数,让每次请求的URL都不同,从而绕过缓存。
// 获取video元素
const videoElement = document.querySelector('video');
// 获取当前视频的src地址
let currentSrc = videoElement.src;
// 判断地址中是否已经有参数,拼接随机参数
if (currentSrc.indexOf('?') !== -1) {
currentSrc += '&t=' + Date.now();
} else {
currentSrc += '?t=' + Date.now();
}
// 重新设置视频src并加载
videoElement.src = currentSrc;
videoElement.load();方法二:重置video元素并重新赋值
可以通过先清空video元素的src属性,再重新赋值的方式,触发浏览器重新请求视频资源,同样可以达到清除缓存重新加载的效果。
const videoElement = document.querySelector('video');
// 先清空src
videoElement.src = '';
// 可选:移除原有的source子元素
const sourceElements = videoElement.querySelectorAll('source');
sourceElements.forEach(source => {
videoElement.removeChild(source);
});
// 重新设置视频地址,这里可以根据需要拼接随机参数避免缓存
videoElement.src = 'your_video_path.mp4?t=' + Date.now();
// 调用load方法重新加载
videoElement.load();
// 如果需要自动播放可以加上下面这行
// videoElement.play();方法三:使用createObjectURL重新创建视频源
如果需要加载本地或者动态获取的视频流,还可以先通过fetch请求视频资源,再创建对象URL赋值给video元素,这种方式也不会使用浏览器原有的缓存。
const videoElement = document.querySelector('video');
// 请求视频资源,不使用缓存
fetch('your_video_path.mp4', {
cache: 'reload' // 强制重新请求,不使用缓存
}).then(response => {
return response.blob();
}).then(blob => {
// 创建对象URL
const videoUrl = URL.createObjectURL(blob);
// 赋值给video元素
videoElement.src = videoUrl;
videoElement.load();
// 释放之前的对象URL,避免内存泄漏
if (videoElement.dataset.lastObjectUrl) {
URL.revokeObjectURL(videoElement.dataset.lastObjectUrl);
}
videoElement.dataset.lastObjectUrl = videoUrl;
});不同方法适用场景对比
下面是三种方法的适用场景和优缺点的对比,开发者可以根据实际需求选择:
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 追加随机参数 | 普通静态视频文件更新后重新加载 | 实现简单,兼容性好,几乎所有浏览器都支持 | 每次都会重新请求资源,即使资源没有更新 |
| 重置video元素 | 需要完全重新初始化视频元素的情况 | 可以彻底清空原有状态,兼容性好 | 需要手动处理原有的source子元素,步骤稍多 |
| createObjectURL方式 | 动态加载视频流、本地视频文件加载 | 可以完全控制请求过程,不使用浏览器缓存 | 需要处理对象URL的释放,避免内存泄漏,实现步骤较多 |
注意事项
- 调用
videoElement.load()方法后,视频会重新加载,但是不会自动播放,如果需要自动播放需要额外调用play()方法,且要符合浏览器的自动播放规则。 - 如果视频有多个source子元素,建议优先使用移除source再重新添加的方式,而不是直接修改src属性,避免兼容性问题。
- 使用createObjectURL方式时,一定要在适当的时候调用
URL.revokeObjectURL()释放资源,避免造成内存占用过高。
HTML_videoJavaScript视频缓存清除视频重载前端视频处理修改时间:2026-05-25 10:53:20