防止网页挂机的脚本,检测用户无操作时自动刷新或提示
// ==UserScript==
// @name Anti-Idle Script
// @namespace http://tampermonkey.net/
// @version 0.4
// @description 防止网页挂机的脚本,检测用户无操作时自动刷新或提示
// @author wooluo
// @match *://*/*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 设置无操作时间阈值(毫秒)
const IDLE_TIME_THRESHOLD = 300000; // 5分钟
let lastActivityTime = Date.now();
let warningShown = false;
// 检测用户活动
function updateActivityTime() {
lastActivityTime = Date.now();
warningShown = false;
}
// 添加事件监听器
['mousemove', 'keydown', 'click', 'scroll'].forEach(event => {
window.addEventListener(event, updateActivityTime, true);
});
// 模拟用户活动 - 每30秒轻微移动鼠标1像素
setInterval(() => {
const event = new MouseEvent('mousemove', {
view: window,
bubbles: true,
cancelable: true,
clientX: Math.random() * 10,
clientY: Math.random() * 10
});
document.dispatchEvent(event);
}, 30000);
// 定期检查活动状态
setInterval(() => {
const currentTime = Date.now();
const idleTime = currentTime - lastActivityTime;
if (idleTime > IDLE_TIME_THRESHOLD) {
if (!warningShown) {
// 显示警告
const confirmed = confirm('检测到您长时间无操作,页面将在30秒后自动刷新!点击确定取消自动刷新。');
if (confirmed) {
lastActivityTime = Date.now(); // 重置活动时间
} else {
warningShown = true;
setTimeout(() => {
window.location.reload();
}, 30000); // 30秒后刷新
}
}
}
}, 60000); // 每分钟检查一次
// 2倍速倒计时功能
setInterval(() => {
const timeElements = document.querySelectorAll('*');
timeElements.forEach(el => {
if (el.textContent.includes('还需') && el.textContent.includes('分钟') && el.textContent.includes('秒')) {
const text = el.textContent;
const matches = text.match(/(\d+)分钟(\d+)秒/);
if (matches) {
let minutes = parseInt(matches[1]);
let seconds = parseInt(matches[2]);
// 计算2倍速后的时间
let totalSeconds = minutes * 60 + seconds;
totalSeconds = Math.max(0, totalSeconds - 2); // 每秒减2实现2倍速
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;
el.textContent = text.replace(/(\d+)分钟(\d+)秒/, `${minutes}分钟${seconds}秒`);
}
}
});
}, 1000);
})();