您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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)
- })()