Userscript 不会取消对某些页面上文本输入的关注

Userscript won't un-focus the text input on some pages

我有一个小的 Greasemonkey 脚本,它可以分散所有内容的焦点,只 return 将焦点放在网页的顶层。
代码如下所示:

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

除了 WhatsApp Web,它在我使用的所有网页上都运行良好。它会立即重新聚焦消息输入框。
我在 Firefox 中关闭了自动对焦。

如何才能真正做到万无一失?连 WhatsApp 网页消息输入框都没有。

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

无论如何,无需创建 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 问题已经涵盖了各种机制。