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

标签 javascript greasemonkey tampermonkey

我有一个小的 Greasemonkey 脚本,它的目的是分散所有的焦点,并将焦点返回到网页的顶层。
代码如下所示:

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 问题已经涵盖了各种机制。

关于javascript - Userscript 不会取消对某些页面上文本输入的关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55858374/

相关文章:

javascript - knockout 选择选项在渲染项目后绑定(bind)回调

javascript - Ajax错误: index. html :17 Uncaught InvalidStateError: Failed to execute 'send' on 'XMLHttpRequest' : The object's state must be OPENED. sendAjax

javascript - nextElementSibling 卡住 firefox

javascript - 为什么这个 chrome/Greasemonkey 脚本没有执行?

javascript - 代码可以在浏览器控制台中运行,但不能在 tampermonkey 中运行

jquery - 在 Tampermonkey 中使用 jQuery

javascript - 使用 css :nth-child selector 对列表项进行样式化

javascript - javascript中的顺序函数调用

javascript - 如何使用 GreaseMonkey 删除/关闭页面上的“不可选择”?

service-worker - 如何在用户脚本中使用服务 worker