Search with selected text by pressing s(Google), t(Translate) or d(Oxford) within 2 seconds.
目前為
// ==UserScript==
// @name SelectAndGo
// @namespace com.gmail.fujifruity.greasemonkey
// @version 1.0
// @description Search with selected text by pressing s(Google), t(Translate) or d(Oxford) within 2 seconds.
// @author fujifruity
// @match *://*/*
// @grant GM.openInTab
// ==/UserScript==
(() => {
const timeoutMs = 2000
const log = (...msg) => console.log('SelectAndGo:', ...msg)
function handleKeydown(event) {
if (event.target.tagName == "INPUT" || event.ctrlKey == true || event.altKey == true) return
const selection = window.getSelection().toString()
switch (event.key) {
case 's':
GM.openInTab("https://www.google.com/search?q=" + selection, false)
break
case 't':
GM.openInTab("https://translate.google.com/#en/ja/" + selection, false)
break
case 'i':
GM.openInTab("https://www.google.com/search?tbm=isch&q=" + selection, false)
break
case 'o': {
let url = "https://www.oxfordlearnersdictionaries.com/search/english/?q="
// the website requires hyphen-separated words
let query = selection.replace(/\s+/g, '-')
GM.openInTab(url + query, false)
break
}
case 'c':
alert(window.getSelection().toString().length + ' characters')
break
}
}
function setShortcut() { window.addEventListener('keydown', handleKeydown) }
function unsetShortcut() { window.removeEventListener('keydown', handleKeydown) }
// set shortcuts on selectStart; unset the shortcuts in seconds.
window.addEventListener('selectstart', (() => {
setShortcut()
// unset shortcuts in seconds.
window.onmouseup = () => {
setTimeout(unsetShortcut, timeoutMs)
window.onmouseup = null
}
// unset shortcuts when selection is triggerd by ctrl+a
window.onkeyup = () => {
setTimeout(unsetShortcut, timeoutMs)
window.onkeyup = null
}
}))
log('selectstart listener is set')
})()