這個想法讓我感興趣,所以這裏是Tampermonkey的一個基本實現,它可以通過特殊的.tld
可用於用戶腳本的域在所有Google域上運行。
// ==UserScript==
// @name Google digits
// @include https://www.google.tld/*
// @run-at document-start
// ==/UserScript==
// only work on search pages with #q= &q= ?q=
if (location.href.match(/[#&?]q=/)) {
window.addEventListener('keydown', function(e) {
var digit = e.keyCode - 48;
// 48 is the code for '0'
if (digit >= 1 && digit <= 9 &&
// don't intercept if a modifier key is held
!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey &&
// don't intercept 1-9 in the search input
e.target.localName != 'input')
{
// get all results in an array
var links = document.querySelectorAll('h3.r a');
// arrays are 0-based
var link = links[digit - 1];
if (link) {
// go to the linked URL
location.href = link.href;
// prevent site from seeing this keyboard event
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
}
}
}, true); // true means we capture the event before it's "bubbled" down
}
面臨的挑戰是在頁面做之前處理事件,所以我用一個capturing listener的泡沫鏈的頂端,在window
對象,並用@run-at: document-start
metakey註冊處理程序的頁面註冊前的擁有。
非常好的代碼; +1 :)我只是擔心這種熱情可能會導致新用戶認爲這是一個免費的代碼編寫服務。如果你檢查OP的帖子,你可以看到他有資格因爲多種原因關閉(推薦/太寬泛)。 –
是的,我知道,我投票結束了在google-chrome-extension標籤中看到的一半問題。 – wOxxOm
他實際上最初在SuperUser(http://superuser.com/q/1123358/194976)上發佈了這個問題。我在那裏評論說這是不重要的,所以他在這裏重新嘗試。 –