用户脚本不会使某些页面上的文本输入不集中

时间:2019-04-25 22:23:31

标签: javascript greasemonkey tampermonkey

我有一个小的Greasemonkey脚本,该脚本意在使所有内容失去焦点,只是将焦点返回到网页的顶层。
代码如下:

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

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

如何确保真正没有任何事情成为焦点?甚至没有Wha​​tsApp Web消息输入框。

1 个答案:

答案 0 :(得分: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并将其阻止。如何做这样的事情完全取决于页面代码是什么。这是一个不同的问题,但是其他堆栈溢出问题已经涵盖了各种机制。