您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
2024. 5. 30. 오후 4:58:27
// ==UserScript== // @name arca.live page mover // @match https://arca.live/* // @grant GM_setValue // @grant GM_getValue // @version 1.4.1 // @author 7r // @license MIT // @description 2024. 5. 30. 오후 4:58:27 // @namespace Violentmonkey Scripts // ==/UserScript== (() => { const CACHE_KEY = 'arca_live_page_cache'; const cache = GM_getValue(CACHE_KEY, {}); const isInputElement = ({target}) => ['INPUT', 'TEXTAREA'].includes(target.nodeName) || target.classList.contains('fr-element'); const removeRepeatedSubstring = (str, substr) => str.replace(new RegExp(`/${substr}`, 'g'), ''); const getMovedPage = (url, isLeftArrow) => { if (url.includes("/write")) return; const urlObj = new URL(url); const pathParts = urlObj.pathname.split('/').filter(Boolean); const isPostDetail = pathParts.length > 2; const currentPage = parseInt(urlObj.searchParams.get('p')) || 1; if (!currentPage && !isPostDetail && !isLeftArrow) return; const newPage = isLeftArrow ? Math.max(currentPage - 1, 1) : (isPostDetail ? currentPage : currentPage + 1); const params = new URLSearchParams(); params.set('p', newPage); urlObj.hash = ''; urlObj.search = params.toString(); const newUrl = isPostDetail ? removeRepeatedSubstring(urlObj.toString(), pathParts.at(-1)) : urlObj.toString(); cache[newUrl] = newPage; location.href = newUrl; }; window.addEventListener('keydown', e => { if (isInputElement(e) || e.altKey || e.ctrlKey || e.shiftKey || [16, 17, 18].includes(e.keyCode)) return; const isLeftArrow = e.keyCode === 37; const isRightArrow = e.keyCode === 39; if (isLeftArrow || isRightArrow) { getMovedPage(document.location.href, isLeftArrow); e.preventDefault(); } }); GM_setValue(CACHE_KEY, cache); })();