您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在湖南大学CG平台提交题目前自动选择C++
// ==UserScript== // @name 湖南大学CG平台自动选择C++ // @namespace http://tampermonkey.net/ // @version 1.2 // @description 在湖南大学CG平台提交题目前自动选择C++ // @author 淼畔 // @match https://cg.hnu.edu.cn/* // @grant none // @license MIT // @icon https://cg.hnu.edu.cn/images/cgicon.png // ==/UserScript== (function() { 'use strict'; // 配置参数 const TARGET_LANGUAGE = 'c++'; const MAX_RETRIES = 8; // 增加重试次数 const INITIAL_DELAY = 300; // 初始延迟(毫秒) const RETRY_INTERVAL = 400; // 重试间隔(毫秒) // 静默设置语言的核心函数 function setLanguageSilently(attempt = 0) { try { const languageSelect = document.getElementById('languages') || document.querySelector('select[name="progLanguage"]'); if (languageSelect) { // 检查是否已经是目标语言 if (languageSelect.value === TARGET_LANGUAGE) { return true; } // 设置目标语言 languageSelect.value = TARGET_LANGUAGE; // 触发所有可能的事件 const events = ['change', 'input', 'click']; events.forEach(eventType => { const event = new Event(eventType, { bubbles: true }); languageSelect.dispatchEvent(event); }); // 验证是否设置成功 if (languageSelect.value === TARGET_LANGUAGE) { return true; } } // 重试逻辑 if (attempt < MAX_RETRIES) { setTimeout(() => setLanguageSilently(attempt + 1), RETRY_INTERVAL); } return false; } catch (e) { return false; } } // 初始化函数 function initSilently() { // 初始延迟后执行 setTimeout(() => { // 立即尝试一次 setLanguageSilently(); // 监听DOM变化 const observer = new MutationObserver(() => { setLanguageSilently(); }); observer.observe(document.body, { childList: true, subtree: true }); // 处理SPA路由变化 window.addEventListener('popstate', () => { setTimeout(setLanguageSilently, 100); }); }, INITIAL_DELAY); } // 启动逻辑 if (document.readyState === 'complete') { initSilently(); } else { const onReady = () => { document.removeEventListener('DOMContentLoaded', onReady); window.removeEventListener('load', onReady); initSilently(); }; document.addEventListener('DOMContentLoaded', onReady); window.addEventListener('load', onReady); } })();