Google digits

Press 1-9 on Google search page to open the corresponding link

目前為 2021-05-17 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Google digits
// @description  Press 1-9 on Google search page to open the corresponding link
// @include      https://www.google.tld/*
// @version      1.2.2
// @author       wOxxOm
// @namespace    wOxxOm.scripts
// @license      MIT License
// @run-at       document-start
// @grant        none
// ==/UserScript==

const SEL = '#rso a h3';
const SEL10 = '#rso > :nth-child(10) a h3';

document.documentElement.appendChild(document.createElement('style')).textContent = /*css*/ `
body {
  counter-reset: digitnav;
}
${SEL}::before {
  counter-increment: digitnav;
  content: counter(digitnav) ":";
  position: absolute;
  margin-left: -1em;
  opacity: .5;
  z-index: 127;
}
${SEL10}::before {
  content: "0:";
}
${SEL}:hover::before {
  opacity: 1;
}
`;

addEventListener('keydown', function onKeyDown(e) {
  const k = e.which;
  const digit =
    k >= 48 && k <= 57 ? k - 48 :
    k >= 96 && k <= 105 ? k - 96 :
    -1;
  if (digit >= 0 &&
      location.href.match(/[#&?]q=/) &&
      !e.metaKey && !e.ctrlKey &&
      e.target.localName != 'input') {
    const el = document.querySelectorAll(SEL)[digit ? digit - 1 : 9];
    const link = el && el.closest('a');
    if (!link) return;
    removeEventListener('keydown', onKeyDown, true);
    e.stopPropagation();
    el.style.backgroundColor = 'yellow';
    link.focus();
    link.dispatchEvent(new MouseEvent('click',
      e.shiftKey && {shiftKey: true} ||
      e.altKey && {ctrlKey: true} ||
      {}));
  }
}, true);