// ==UserScript== // @name 恢复希悦预测成绩及排名显示 // @license MIT // @namespace http://tampermonkey.net/ // @version 2024-01-04 // @description Bring Chalk class ranking and predicated grades back // @author You // @match https://chalk-c3.seiue.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=seiue.com // @grant none // @downloadURL none // ==/UserScript== function addXMLRequestCallback(callback){ var oldSend, i; if( XMLHttpRequest.callbacks ) { XMLHttpRequest.callbacks.push( callback ); } else { XMLHttpRequest.callbacks = [callback]; oldSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(){ for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) { XMLHttpRequest.callbacks[i]( this ); } oldSend.apply(this, arguments); } } } addXMLRequestCallback( function( xhr ) { xhr.addEventListener("load", function(){ if ( xhr.readyState == 4 && xhr.status == 200 && xhr.responseURL.startsWith('https://api.seiue.com/vnas/klass/personal/class') ) { const response = JSON.parse(xhr.responseText); const grade = response.grade; const gainedRank = grade.gained_rank; const gainedBase = grade.gained_rank_base; const rate = grade.gained_score_rate; console.log(gainedRank, gainedBase, rate) updateDOM(gainedRank, gainedBase, rate); } }); }); function updateDOM(gainedRank, gainedBase, rate) { const parent = document.getElementsByClassName('sc-ddSVtv hwAXdD')[0]; if (!parent) { setTimeout(() => { updateDOM(gainedRank, gainedBase, rate); }, 1000); } const blueBox = document.createElement('div'); blueBox.setAttribute('class', 'sc-dIGTxO gxUoxr sc-biqURg kqFCNC') const rank = document.createElement('div2'); rank.setAttribute('class', 'sc-hYAvag iSuscE sc-ieyPFj fRXfRt') rank.innerHTML = `${gainedRank} / ${gainedBase}` const rankText = document.createElement('div') rankText.setAttribute('class','sc-hYAvag iSuscE sc-kEOLkp crIvFK') rankText.innerHTML = '排名' blueBox.appendChild(rank) blueBox.appendChild(rankText) const blueBox2 = document.createElement('div'); blueBox2.setAttribute('class', 'sc-dIGTxO gxUoxr sc-biqURg kqFCNC') const rateBox = document.createElement('div'); rateBox.setAttribute('class', 'sc-hYAvag iSuscE sc-ieyPFj fRXfRt') rateBox.innerHTML = `${rate * 100}` const rateText = document.createElement('div') rateText.setAttribute('class','sc-hYAvag iSuscE sc-kEOLkp crIvFK') rateText.innerHTML = '预测得分' blueBox2.appendChild(rateBox) blueBox2.appendChild(rateText) parent.appendChild(blueBox); parent.appendChild(blueBox2); }