用户脚本不会在某些页面上取消对焦文本输入

问题描述 投票:2回答:1

我有一个小的Greasemonkey脚本,用于解除所有内容的重点,只需将焦点返回到网页的顶层。 代码如下所示:

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

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

怎样才能确保真正没有任何东西成为焦点?甚至没有Wha​​tsApp Web消息输入框。

javascript greasemonkey tampermonkey
1个回答
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问题上涵盖了各种机制。

© www.soinside.com 2019 - 2024. All rights reserved.