🏠 Home 

学习通 防暂停 | 防熄屏 | 自动播放 | 自动静音

南京信息工程大学学习通防暂停、自动播放、自动静音


Install this script?
// ==UserScript==
// @name         学习通 防暂停 | 防熄屏 | 自动播放 | 自动静音
// @namespace    http://tampermonkey.net/
// @version      20241209-3fd8e5e3
// @description  南京信息工程大学学习通防暂停、自动播放、自动静音
// @author       HowardZhangdqs
// @match        https://*.chaoxing.com/mycourse/studentstudy*
// @icon         https://www.chaoxing.com/images/favicon.ico
// @grant        none
// @license      WTFPL
// ==/UserScript==
// 20241209
// + fix: 多视频播放时关闭自动播放
//
// 20241206
// + feat: 阻止系统熄屏
(() => {
"use strict";
const check_sleep_latency = 1000;
const check_stop_latency = 5000;
const config = {
check_sleep_latency,
check_stop_latency,
};
const unbounded = () => {
let interval_id;
let running = false;
const closure = {
start: async () => {
running = true;
let video = null;
interval_id = setInterval(() => {
const iframeDocument =
document.getElementsByTagName("iframe")[0].contentWindow?.document;
const iframes = iframeDocument?.getElementsByTagName("iframe");
if (!iframes || iframes.length !== 1) {
return;
}
const innerIframeDocument = iframes[0].contentWindow?.document;
video = innerIframeDocument?.querySelector("#video_html5_api");
const errDoms = innerIframeDocument?.querySelectorAll(
".ans-vjserrdisplay-title",
).length;
if (errDoms) {
location.reload();
}
if (video) {
video.play();
video.muted = true;
}
}, config.check_sleep_latency);
},
stop: () => {
running = false;
if (interval_id) {
clearInterval(interval_id);
}
},
get running() {
return running;
},
};
return closure;
};
const weblock = () => {
let interval_id;
let running = false;
let waken = false;
const closure = {
start: async () => {
running = true;
interval_id = setInterval(async () => {
if (waken) {
return;
}
if ("wakeLock" in navigator) {
try {
const wakeLock = await navigator.wakeLock.request("screen");
console.log(
`Wake Lock ${wakeLock.released ? "未激活" : "已激活"}`,
);
waken = true;
} catch (err) {
console.error(`${err.name}, ${err.message}`);
}
try {
const wakeLock = await navigator.wakeLock.request("screen");
wakeLock.addEventListener("release", () => {
console.log("Wake Lock 已释放");
waken = false;
});
} catch (err) {
console.error(`${err.name}, ${err.message}`);
}
}
}, config.check_sleep_latency);
},
stop: () => {
running = false;
if (interval_id) {
clearInterval(interval_id);
}
},
get running() {
return running;
},
};
return closure;
};
const ub = unbounded();
const wb = weblock();
ub.start();
wb.start();
})();