您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
단축키 복원
// ==UserScript== // @name Dcinside 단축키 복원 // @namespace http://tampermonkey.net/ // @version 1 // @description 단축키 복원 // @match *://gall.dcinside.com/* // @grant none // ==/UserScript== (function () { 'use strict'; document.addEventListener('keydown', (e) => { if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return; let key = e.key; if (key === '0') key = '10'; if (!/^[1-9]$|^10$/.test(key)) return; const index = parseInt(key, 10) - 1; const posts = Array.from(document.querySelectorAll('.us-post')) .filter(row => !row.querySelector('.icon_notice')); if (index < posts.length) { const link = posts[index].querySelector('.gall_tit > a'); if (link) { location.href = link.href; } } }); function goToPage(offset) { const url = new URL(location.href); const params = url.searchParams; let page = parseInt(params.get('page') || '1', 10); page += offset; if (page < 1) page = 1; params.set('page', page); url.search = params.toString(); url.hash = ''; location.href = url.toString(); } function goToPost(offset) { const url = new URL(location.href); const params = url.searchParams; let no = parseInt(params.get('no') || '1', 10); no += offset; if (no < 1) no = 1; params.set('no', no); url.search = params.toString(); url.hash = ''; location.href = url.toString(); } document.addEventListener('keydown', function (e) { const activeTag = document.activeElement.tagName; const key = e.key.toUpperCase(); if (activeTag === 'INPUT' || activeTag === 'TEXTAREA') return; if (key === 'F') { e.preventDefault(); return; } const url = location.href; const isViewPage = url.includes('/view/'); if (!isViewPage && !isNaN(key) && key >= 1 && key <= 9) { const posts = document.querySelectorAll('.ub-content.us-post'); const index = parseInt(key, 10) - 1; if (posts[index]) { const link = posts[index].querySelector('a.ub-word'); if (link) location.href = link.href; } } switch (key) { case 'W': { const writeBtn = document.querySelector('#btn_write'); if (writeBtn) { const onclickAttr = writeBtn.getAttribute('onclick'); if (onclickAttr && onclickAttr.includes('goWrite(')) { const urlMatch = onclickAttr.match(/goWrite\('([^']+)'/); if (urlMatch && urlMatch[1]) { location.href = urlMatch[1]; break; } } writeBtn.click(); } break; } case 'R': location.reload(); break; case 'S': { const searchInput = document.querySelector('input.in_keyword[name="search_keyword"]'); if (searchInput) { searchInput.focus(); e.preventDefault(); } break; } case 'C': { const commentLink = document.querySelector('a[href="#focus_cmt"]'); if (commentLink) { commentLink.click(); } else { const cmtSection = document.querySelector('#focus_cmt'); if (cmtSection) { cmtSection.scrollIntoView({ behavior: 'smooth' }); } } break; } case 'B': { if (isViewPage) { goToPost(-1); } break; } case 'N': { if (isViewPage) { goToPost(1); } break; } case 'U': window.scrollBy(0, 200); break; case 'I': window.scrollBy(0, -200); break; case 'J': window.scrollBy(0, window.innerHeight); break; case 'K': window.scrollBy(0, -window.innerHeight); break; case 'G': if (!isViewPage) goToPage(-1); break; case 'H': if (!isViewPage) goToPage(1); break; case 'L': { if (!isViewPage) { const url = new URL(location.href); url.searchParams.set('page', '1'); url.hash = ''; location.href = url.toString(); } break; } } }); })();