您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Focus the first visible input text field when you press Esc key, or restore the previously focused element on second press
当前为
// ==UserScript== // @name Focus input text field on Esc // @description Focus the first visible input text field when you press Esc key, or restore the previously focused element on second press // @version 1.0.6 // @include * // @author wOxxOm // @namespace wOxxOm.scripts // @license MIT License // @run-at document-start // ==/UserScript== var TEXT_FIELD = ' search text number url '; var previousElement; var scrollPos; var first; document.addEventListener('keydown', function (e) { if (e.keyCode !== 27 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { return; } if (window !== top) { top.postMessage(GM_info.script.name, '*'); e.preventDefault(); e.stopPropagation(); return; } run(); }, true); window.addEventListener('message', function (e) { if (e.data === GM_info.script.name) { run({relayedFromFrame: true}); } }); function run(params) { // find text inputs inside visible DOM containers var inputs = document.getElementsByTagName('input'); for (var i = 0, input, il = inputs.length; i < il && (input = inputs[i]); i++) { var priority = TEXT_FIELD.indexOf(' ' + input.type + ' '); if (priority < 0) continue; var n = input, style; while (n && n.style && (style = getComputedStyle(n)) && style.display !== 'none' && style.visibility !== 'hidden') { n = n.parentNode; } // visible if reached DOM root if (n && n.style) continue; // set the first OR if it's empty, try to select an identically named input field with some text (happens on some sites) if (!first || ( input.value && input.name === first.name && ( !input.form && !first.form || input.form.action === first.form.action ) )) { first = input; if (first.value) break; } } if (!first) return; var invoke = params && params.relayedFromFrame ? passthru : onkeyup; if (first !== document.activeElement) { // switch to the found input field previousElement = document.activeElement; scrollPos = [scrollX, scrollY]; invoke(setFocus); } else if (previousElement) { invoke(restoreFocus); } } function setFocus() { first.focus(); first.select(); } function restoreFocus() { // in case document.body (page "background") was previously selected document.activeElement.blur(); previousElement.focus(); scrollTo(scrollPos[0], scrollPos[1]); } // focusing should be done at key-up to prevent the Esc-keydown being also chain-handled by the just focused element function onkeyup(cb) { document.addEventListener('keyup', function keyup(e) { if (e.keyCode !== 27) return; document.removeEventListener('keyup', keyup); cb(e); }); } function passthru(fn) { return fn.apply(this, arguments); }