【问题标题】:Userscript won't un-focus the text input on some pagesUserscript 不会将文本输入聚焦在某些页面上
【发布时间】:2026-01-11 23:25:03
【问题描述】:

我有一个小 Greasemonkey 脚本,它旨在使所有内容都失去焦点,并将焦点返回到网页的顶层。
代码如下所示:

document.addEventListener('keydown', function(event) {
    if (event.ctrlKey && event.keyCode === 32) {
        document.activeElement.blur()
    }
}, true);

它在我使用的所有网页上都能正常工作,除了 WhatsApp Web。它会立即重新调整消息输入框的焦点。
我在 Firefox 中关闭了自动对焦。

如何确保真正没有任何东西被聚焦?甚至没有 WhatsApp 网络消息输入框。

【问题讨论】:

    标签: javascript greasemonkey tampermonkey


    【解决方案1】:

    浏览器控制台中是否有任何错误或消息?您使用的是什么浏览器版本?

    无论如何,无需创建 WhatsApp 帐户,或者您发布 MCVE,这里一些 可能性:

    • 页面使用JS重置焦点——由keydown触发。
    • 页面使用 JS 重置焦点 -- 由其他东西触发。
    • 页面已重置默认活动元素((以前)在某些浏览器上可能)。
    • 页面已覆盖document.activeElement.blur()

    此代码可能有效:

    document.addEventListener ('keydown', zEvent => {
        if (zEvent.ctrlKey && zEvent.keyCode === 32) {
            let actElem     = document.activeElement;
            if (actElem)    actElem.blur ();
            else            console.error ("document.activeElement is unset");
    
            zEvent.preventDefault ();
            zEvent.stopImmediatePropagation ();
        }
    }, true);
    


    如果没有,并且浏览器控制台中没有相关消息,请从控制台运行:

    console.log (document.activeElement.blur.toSource() );
    

    看看是不是原生函数。

    您可以尝试的另一件事是查找或创建不同的输入并.focus() 它。 (document.body.focus() 通常不起作用,唉。)


    否则,您将不得不找到正在重置焦点的 javascript 并阻止它。如何做这样的事情取决于页面代码到底是什么。这是针对不同问题的问题,但其他 Stack Overflow 问题已经涵盖了各种机制。

    【讨论】:

    • 没有错误。我使用最新版本的 Firefox。记录活动元素后,似乎使用 blur() 将其更改为 body,但随后网站会自动将其重置。我会看看我是否可以以某种方式阻止它。谢谢你的回答。