addEventListener не обрабатывает ключи прямо в старой версии Chrome - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь добавить слушатель событий на веб-сайт с помощью такого сценария:

// ==UserScript==
// @name        Reuters: j/k navigation
// @version     0.01
// @match       https://www.reuters.com/*
// @run-at      document-start
// @grant       none
// ==/UserScript==

addEventListener('keypress', e => {
    if (e.ctrlKey ||
        e.altKey ||
        e.metaKey ||
        e.shiftKey ||
        (e.key !== 'k' && e.key !== 'j')) {
        alert("NO");
        return;
    }
    alert("YES");
});

И хотя в Firefox он действительно запускает правильные оповещения в зависимости от клавиш, которые нажимает пользователь, в Chrome по какой-то причине все, что я получаю, это всегда «НЕТ», Пробел , j, k , l или n , например, нажаты.

В чем здесь может быть проблема? Благодаря.

(На данный момент я ограничен старой OSX, поэтому и Firefox, и Chrome довольно старые - Chrome 49 лет - но я сомневаюсь, что это должно быть проблемой ...)

1 Ответ

0 голосов
/ 29 августа 2018

Свойство .key было недоступно в Chrome 49 ; используйте .which.

Вот так:

const jKey = 'j'.charCodeAt (0);
const kKey = 'k'.charCodeAt (0);

addEventListener ('keypress', e => {
    if (e.ctrlKey ||
        e.altKey ||
        e.metaKey ||
        e.shiftKey ||
        (e.which !== jKey  &&  e.which !== kKey) ) {
        console.log (e.which, "NO");
        return;
    }
    console.log (e.which, "YES");
} );
Click here then press keys...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...