const end = video.seekable.length ? video.seekable.end(0) : video.duration;
range.max = String(end);
video.currentTime = Math.min(target, end);

视频播完一次后拖动进度条,滑块跟着手走画面不动,控制台没有报错,刷新页面才恢复。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,播放结束后进度条最大值还停在旧 duration,拖动时设置的 currentTime 落在可寻址范围外。脚本缓存了第一次读到的 seekable.end(0),之后没有更新。

「进度条缓存失效」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

处理上按这个顺序:每次 seek 前重新读 video.seekable.end(0);进度条最大值用 durationchange 同步;拖动结束再写 currentTime 避免频繁 seek。

改完只确认一件事:重播时拖动进度条画面跟着跳,最右端可以拖到结尾。

作者 9823189