您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AtCoderのユーザー名の前にユーザーのアイコンを表示します。
// ==UserScript== // @name AC Iconner // @namespace https://atcoder.jp/ // @version 0.3 // @description AtCoderのユーザー名の前にユーザーのアイコンを表示します。 // @author Yama.can // @match https://atcoder.jp/* // @icon https://www.google.com/s2/favicons?sz=64&domain=atcoder.jp // @grant none // @license MIT // ==/UserScript== (async function() { 'use strict'; let addedElements = []; let cache = {}; window.setInterval(async () => { let beforeElements = Array.from(document.querySelectorAll('a[href^="/users/"]')); let elements = beforeElements.concat(); for(let i = 0; i < elements.length; i++){ if(addedElements.indexOf(elements[i]) != -1){ elements[i] = undefined; } } addedElements = beforeElements.concat(); console.log(addedElements, beforeElements); for(let i = 0; i < elements.length; i++){ const element = elements[i]; if(element == undefined) continue; let imgUrl; let wait = true; if(cache[element.href] == undefined){ let response; let ok = false; while(!ok){ try{ response = await (await fetch(element.href)).text(); ok = true; }finally{ await new Promise((resolve) => window.setTimeout(resolve,100)); } } imgUrl = response.match(/\<img class=\'avatar\' src=\'(.*)' width/)[1]; cache[element.href] = imgUrl; } else { wait = false; imgUrl = cache[element.href]; } let child = document.createElement("img") child.style = "height: 1.5em"; child.src = imgUrl; element.parentNode.insertBefore(child,element.parentNode.firstChild); if(wait){ await new Promise((resolve) => window.setTimeout(resolve,10)); } }; },100); })();