您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Keyboard navigation
// ==UserScript== // @name Keyboard navigator // @version 1.8 // @description Keyboard navigation // @author badook // @include http*://* // @grant GM_openInTab // @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js // @namespace https://gf.qytechs.cn/users/240988 // @license MIT // ==/UserScript== 'use strict'; var jq = $.noConflict(); //var bgcolor = "#EBF2FF"; var bgcolor = 'rgba(0, 50, 0, 0.5)'; var util = { q: function (query, context) { return (context || document).querySelector(query); }, qq: function (query, context) { return [].slice.call((context || document).querySelectorAll(query)); } }; var i = 0; var results = []; var isGoogleSearch = /^(http|https):\/\/(www.)?google.(com|co.uk|it)\/search\?/.test(location.href); if (isGoogleSearch) { console.log("It's a google search page"); var searchBox = jq('input[name="q"]').first(); var prevPage = document.getElementById("pnprev"); var nextPage = document.getElementById("pnnext"); results = util.qq('#rso div.g', document.body); //results = [].slice.call(jq('#rso div.g ', document.body).not(jq(this), ':has(a))')); if (results.length) { results[i].style.backgroundColor = bgcolor; jq(results).click(function () { results[i].style.backgroundColor = "transparent"; i = results.indexOf(jq(this).get(0)); jq(this).get(0).style.backgroundColor = bgcolor; }); } } document.onkeypress = function (e) { console.log(e.keyCode); if (!shouldScroll(e)) { return; } switch (e.keyCode) { case 97: // a if (isGoogleSearch && searchBox !== undefined) { setTimeout(function () { // Dont put current letter in input searchBox.focus(); searchBox.value = searchBox.value; // Cursor to end }, 0); } return; case 13: // enter case 100: // d var url = jq('a', jq(results[i])).attr('href'); if (isGoogleSearch && url !== undefined) { console.log(url); GM_openInTab(url, true); } return; case 68: // D GM_openInTab(util.q('a', results[i]).href, false); return; case 113: // q if (isGoogleSearch && prevPage !== undefined) { prevPage.click(); } return; case 101: // e if (isGoogleSearch && nextPage !== undefined) { nextPage.click(); } return; case 87: // W window.scrollBy(0, -100); return; case 83: // S console.log("scroll") window.scrollBy(0, 100); return; case 119: // w if (isGoogleSearch && i > 0) { results[i--].style.backgroundColor = "transparent"; } break; case 115: // s if (isGoogleSearch && i < results.length - 1) { results[i++].style.backgroundColor = "transparent"; } break; default: return; } if (results !== undefined && results[i] !== undefined) { results[i].style.backgroundColor = bgcolor; scrollToElement(results[i]); } }; function scrollToElement(el) { var elOffset = jq(el).offset().top; var elHeight = jq(el).height(); var windowHeight = jq(window).height(); var offset; if (elHeight < windowHeight) offset = elOffset - ((windowHeight / 2) - (elHeight / 2)); else offset = elOffset; jq('html, body').animate({ scrollTop: offset }, 0); } function shouldScroll(event, direction) { if (event.target.isContentEditable) { return false; } if (event.target.type === 'application/x-shockwave-flash') { return false; } if (event.defaultPrevented) { return false; } if (/button|input|textarea|select|embed|object/i.test(event.target.nodeName)) { return false; } if (event.metaKey === true) { return false; } if (!document.hasFocus()) { return false; } if (document.domain === 'mail.google.com') { if (window.location.hash.indexOf('/') === -1) { return false; } else if (!(event.keyCode in keyMaps.arrows)) { return false; } } /* if (!window.scrollTargetY) { findScrollTargets(event, 'y'); if (!window.scrollTargetY) { return false; } } */ if (!scrollable(window.scrollTargetY, 'y')) { return false; } return true; }; findScrollTargets = function (event, axis) { var scrollableParentX, scrollableParentY, target; if (event == null) { event = null; } if (axis == null) { axis = 'both'; } if (!event || document.activeElement === !document.body) { target = document.activeElement; } else { target = event.target || event.srcElement; target = target.nodeType === 1 ? target : target.parentNode; } if (axis === 'y' || axis === 'both') { scrollableParentY = findScrollableParent(target, 'y'); if (scrollableParentY) { window.scrollTargetY = scrollableParentY; } } if (axis === 'x' || axis === 'both') { scrollableParentX = findScrollableParent(target, 'x'); if (scrollableParentX) { return window.scrollTargetX = scrollableParentX; } } }; findScrollableParent = function (element, axis) { while (true) { if (scrollable(element, axis)) { return element; } else { element = element.parentElement; } } }; scrollable = function (element, axis) { var initialPosition, scrollAxis, scrollVariation; scrollAxis = axis === 'y' ? 'scrollTop' : 'scrollLeft'; if (!element) { return true; } else if (/button|input|textarea|select|embed|object/i.test(element.nodeName)) { return false; } else if (element[scrollAxis] > 10) { return true; } else { initialPosition = element[scrollAxis]; element[scrollAxis] = 10; scrollVariation = element[scrollAxis]; element[scrollAxis] = initialPosition; if (scrollVariation >= 10) { return true; } } return false; };
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址