Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/3f872a45006123dd6bb846a302440cd6.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript== // @name ACM Online Judge 评测状态自动刷新 // @namespace https://ns.altk.org/userscript // @description 在评测时监测,并在评测完成后自动刷新评测状态 // @include https://acm.sjtu.edu.cn/OnlineJudge/code* // @version 0.1 // @grant none // @license GPL-3.0 // @downloadURL https://update.greasyfork.icu/scripts/434299/ACM%20Online%20Judge%20%E8%AF%84%E6%B5%8B%E7%8A%B6%E6%80%81%E8%87%AA%E5%8A%A8%E5%88%B7%E6%96%B0.user.js // @updateURL https://update.greasyfork.icu/scripts/434299/ACM%20Online%20Judge%20%E8%AF%84%E6%B5%8B%E7%8A%B6%E6%80%81%E8%87%AA%E5%8A%A8%E5%88%B7%E6%96%B0.meta.js // ==/UserScript== ; { const STATUS_SELECTOR = '#status_list tbody td:nth-child(4)' const PENDING_REGEXP = /Running & Judging|Pending/i const REFRESH_INTERVAL = 2000 const REFRESH_TIMEOUT = 5000 const isPending = (doc = document) => PENDING_REGEXP.test(doc.querySelector(STATUS_SELECTOR).innerText) const delay = ms => new Promise(resolve => setTimeout(resolve, ms, true)) const monitor = async () => { while (true) { await delay(REFRESH_INTERVAL) const xhr = new XMLHttpRequest() xhr.open('GET', location.href) xhr.responseType = 'document' const response = new Promise((resolve, reject) => { setTimeout(reject, REFRESH_TIMEOUT, 'Timeout exceeded.') xhr.onload = () => resolve(xhr.responseXML) xhr.onerror = reject }) xhr.send() try { const doc = await response if (!isPending(doc)) { location.reload() return } } catch (e) { sweetAlert('ACMOJ Helper: Network Error', `${e}`, 'error') } } } if (isPending()) monitor() else console.log('[ACMOJ Helper] Not pending, not monitoring.') }