您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Introduces (h)jkl navigation into Google Search result. (As an example. You can easily customize this script for other websites.)
当前为
// ==UserScript== // @name HjklNavigation // @namespace com.gmail.fujifruity.greasemonkey // @version 0.1 // @description Introduces (h)jkl navigation into Google Search result. (As an example. You can easily customize this script for other websites.) // @author fujifruity // @include https://www.google.com/search* // @grant GM.openInTab // ==/UserScript== (() => { function log(...msg) { return console.log("HjklNavigation:", ...msg) } function cssOf(elem) { return document.defaultView.getComputedStyle(elem, '') } let focusedIdx = null const googleUrl = "www.google.com" // add another one here const results = (() => { switch (location.hostname) { case googleUrl: return document.getElementsByClassName('rc') // add another one here default: return null } })() function open(result) { switch (location.hostname) { case googleUrl: { const url = result.firstChild.firstChild.href GM.openInTab(url, false) break } // add another one here } } function refocus(nextIdx) { if (focusedIdx == null) { focusedIdx = 0 } else { results[focusedIdx].style.backgroundColor = null focusedIdx = nextIdx } results[focusedIdx].style.backgroundColor = 'lightyellow' results[focusedIdx].scrollIntoView({ behavior: "smooth", block: "center" }) } function handler(event) { if (event.target.tagName == "INPUT" || event.ctrlKey || event.altKey) return const result = results[focusedIdx] switch (event.key) { case 'j': { log('j: down') refocus((focusedIdx + 1) % results.length) break } case 'k': { log('k: up') refocus((focusedIdx - 1 + results.length) % results.length) break } case 'g': { log('g: home') refocus(0) break } case 'G': { log('G: end') refocus(results.length-1) break } case 'l': { log('l: open') open(result) break } } } window.addEventListener('keydown', handler) })()