问题背景
近期雨课堂升级至新版(2025年6月初),用户挂在后台刷课时发现视频会自动暂停,不再像以前一样可以同时刷多个视频;甚至切换标签页和最小化时视频也会自动暂停
解决方案:控制台注入代码
打开浏览器开发者工具(F12),进入“Console”/控制台面板,
输入以下代码并执行:
HTMLVideoElement.prototype.pause = function() {
console.log('[Hooked] Blocked pause on video element');
};
此代码会重写视频元素的pause
方法,使其实际不执行暂停操作,仅输出日志。执行后,切换后台时视频仍会继续播放。
实现原理分析
雨课堂的网页html代码类似这样
<video id="course-video" src="lesson.mp4" controls autoplay></video>
js代码类似这样
//第一行是监听器,监听每个页面自带的属性visibilitychange(可见性变化了吗)
//当变化了就触发停止函数
document.addEventListener("visibilitychange", function () {
if (document.visibilityState === "hidden") {
//获取视频标签
const video = document.getElementById("course-video");
//调用视频标签自带的pause()方法
video.pause(); // 👈 这是雨课堂调用的“切后台暂停”接口
}
});
我们方法的原理
前面对于页面可见性的实际判断可能十分复杂,所以我们没有必要从从判断逻辑出发
我们直接从这个函数的最后落脚点出发。只要它最后调用的是web原生的pause方法,我们就可以改写掉原生的pause()方法,让pause()无法发挥原有的功能,也就是hook掉了
//在这里我们重写了pause()方法,让它的功能变成了输出日志
HTMLVideoElement.prototype.pause = function() {
console.log('[Hooked] Blocked pause on video element');
};
注意:此方法依赖浏览器开发者工具,重启页面后需重新执行。长期解决方案可结合油猴脚本(Tampermonkey)自动注入。