您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
self mode
// ==UserScript== // @name hpc_job // @version 0.0.6 // @include http://219.217.238.193/job // @include http://h/job // @include http://hh/job // @description self mode // @run-at document-start // @namespace https://gf.zukizuki.org/users/164996 // ==/UserScript== const head = `<meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>job</title> <style> body { user-select: none; margin: 0; } #table { display: grid; grid-template-columns: repeat(9, auto); grid-column-gap: 1em; } #node{ margin: 0; } .other { color: #bbb; } #disconnect{ display: none; color: #bbb; position: fixed; left: 50%; transform: translateX(-50%); } </style>` const body = `<div id="app"> <div id='disconnect'>disconnect</div> <pre id="node"></pre> <div id="table"></div> </div>` document.head.innerHTML = head document.body.innerHTML = body const timeout = 5000 const usr = 'bilabila' const app = document.querySelector('#app') const node = document.querySelector('#node') const table = document.querySelector('#table') const disconnect = document.querySelector('#disconnect') const parse = s => { const t = document.implementation.createHTMLDocument() t.body.innerHTML = s return t } const fetchWithTimeout = (url, options) => { return Promise.race([ fetch(url, options), new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout) ) ]) } const main = async () => { let a try { a = await fetchWithTimeout(window.location.href + 's') a = await a.text() } catch (error) { disconnect.style.display = 'block' return } disconnect.style.display = 'none' a = parse(a) let b = [...a.querySelectorAll('tr')].map(i => [...i.children].map(j => j.textContent.trim()) ) let c = b.reduceRight( (a, c) => c[1] === usr ? c.map(i => '<div>' + i + '</div>').join('') + a : a + c.map(i => '<div class=other>' + i + '</div>').join(''), '' ) let d = a.querySelector('table').nextSibling.textContent.trim() d = d.slice(d.indexOf('\n') + 1, d.lastIndexOf('\n')) requestAnimationFrame(() => { node.innerHTML = d table.innerHTML = c }) } main() let timer = setInterval(main, timeout) let changeTimer document.addEventListener( 'visibilitychange', () => { clearTimeout(changeTimer) if (document.hidden) { changeTimer = setTimeout(() => clearInterval(timer), timeout) } else { main() clearInterval(timer) timer = setInterval(main, timeout) } }, )