Press Alt+1 to focus the first text input on all pages
// ==UserScript==
// @name 聚焦第一个文本输入框
// @version 0.6
// @description Press Alt+1 to focus the first text input on all pages
// @author hiisme
// @match *://*/*
// @grant none
// @namespace https://greasyfork.org/users/217852
// ==/UserScript==
(function() {
'use strict';
// 监听键盘按下事件
document.addEventListener('keydown', function(event) {
// 检查是否按下了Alt键和1键
if (event.altKey && event.key === '1') {
event.preventDefault();
focusFirstTextInput();
}
}, false);
// 尝试聚焦第一个文本输入框
function focusFirstTextInput() {
// 扩展的选择器,尝试匹配更多类型的输入框
var inputSelector = [
'input[type="text"]:not([disabled]):not([readonly])',
'input[type="email"]:not([disabled]):not([readonly])',
'input[type="password"]:not([disabled]):not([readonly])',
'input[type="search"]:not([disabled]):not([readonly])',
'input[type="tel"]:not([disabled]):not([readonly])',
'input[type="url"]:not([disabled]):not([readonly])',
'input:not([type]):not([disabled]):not([readonly])', // 无type属性的input也默认为text
'textarea:not([disabled]):not([readonly])',
'[contenteditable="true"]:not([disabled]):not([readonly])', // 可编辑区域
'[role="textbox"]:not([disabled]):not([readonly])' // 带有特定角色的元素
].join(',');
// 排除不可见的元素
var allInputs = document.querySelectorAll(inputSelector);
var firstVisibleInput = Array.from(allInputs).find(input => {
var style = window.getComputedStyle(input);
return style.display !== 'none' && style.visibility !== 'hidden';
});
if (firstVisibleInput) {
firstVisibleInput.focus();
}
}
})();