Пользовательский скрипт не будет не фокусировать ввод текста на некоторых страницах - PullRequest
2 голосов
/ 26 апреля 2019

У меня есть небольшой скрипт Greasemonkey, который предназначен для расфокусировки всего и просто возврата фокуса на верхний уровень веб-страницы.
Код выглядит следующим образом:

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

Он отлично работает навсе веб-страницы, которые я использую, кроме WhatsApp Web .Он сразу же перефокусирует поле ввода сообщения.
Я отключил автофокус в Firefox.

Как можно гарантировать, что действительно ничего не останется в фокусе?Даже поле ввода сообщений WhatsApp Web.

1 Ответ

1 голос
/ 26 апреля 2019

Есть ли ошибки или сообщения в консоли браузера? А какую версию браузера вы используете?

В любом случае, без создания учетной записи 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, который сбрасывает фокус, и заблокировать его. Как это сделать, зависит от того, какой именно код страницы. Это что-то для другого вопроса, но различные механизмы уже были рассмотрены в других вопросах переполнения стека.

...