Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/2fde1b7c364afcc258cc291d5b280428.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript== // @name AtCoder to Luogu Redirect Button // @namespace http://tampermonkey.net/ // @version 1.2 // @description Add a button to redirect from AtCoder problems to Luogu // @author ChatGPT (prompted by PsychoPinkQ) // @match https://atcoder.jp/contests/*/tasks/* // @grant GM_xmlhttpRequest // @connect luogu.com.cn // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/517108/AtCoder%20to%20Luogu%20Redirect%20Button.user.js // @updateURL https://update.greasyfork.icu/scripts/517108/AtCoder%20to%20Luogu%20Redirect%20Button.meta.js // ==/UserScript== (function() { 'use strict'; // 取得目前 AtCoder 題目 URL 的最後部分 (例如 abc328_g) const path = window.location.pathname; const match = path.match(/contests\/(.*?)\/tasks\/(.*)/); if (!match) return; const contest = match[1]; const task = match[2]; const luoguURL = `https://www.luogu.com.cn/problem/AT_${task}`; // 創建按鈕樣式 const button = document.createElement("button"); button.style.position = "fixed"; button.style.bottom = "60px"; // 將按鈕位置向上調整 button.style.left = "20px"; button.style.padding = "5px 10px"; // 調整按鈕大小 button.style.backgroundColor = "rgba(173, 216, 230, 0.7)"; // 淺藍色 button.style.color = "black"; button.style.border = "none"; button.style.borderRadius = "5px"; button.style.fontSize = "12px"; // 縮小字體 button.style.cursor = "pointer"; button.style.zIndex = "1000"; button.textContent = "查看对应 Luogu 题目"; // 檢查 Luogu 題目是否存在 GM_xmlhttpRequest({ method: "GET", url: luoguURL, onload: function(response) { // 判斷頁面標題是否包含「錯誤」 const parser = new DOMParser(); const doc = parser.parseFromString(response.responseText, "text/html"); const title = doc.querySelector("title").innerText; if (title.includes("错")) { // 題目不存在,將按鈕變為淺紅色 button.style.backgroundColor = "rgba(240, 128, 128, 0.7)"; // 淺紅色 button.textContent = "Luogu 似乎尚未有此题目"; button.disabled = true; } else { // 題目存在,設置點擊事件 button.onclick = function() { window.open(luoguURL, "_blank"); }; } }, onerror: function() { button.style.backgroundColor = "rgba(240, 128, 128, 0.7)"; // 請求錯誤也設置為淺紅色 button.textContent = "发生异常"; button.disabled = true; } }); // 將按鈕加入頁面 document.body.appendChild(button); })();