keyCode и которые устарели — так почему это не работает?

#javascript #events #dom-events #keyboard-events

#javascript #Мероприятия #dom-события #клавиатура-события

Вопрос:

Согласно MDN Web Docs KeyboardEvent и обновлениям Google KeyboardEvent ключ и код реализованы во время keyCode и которые устарели.

Имея это в виду, я должен иметь возможность отправлять keydown событие, как показано ниже:

 document.dispatchEvent(
    new KeyboardEvent("keydown", {
        key: 'K',
        code: 'KeyK',
        shiftKey: false,
        ctrlKey: false,
        metaKey: false
    })
);
 

К сожалению, это не работает, хотя, если я добавлю keyCode дополнительно, этот скрипт работает отлично. Объект с ключевым кодом:

 document.dispatchEvent(
    new KeyboardEvent("keydown", {
        key: 'K',
        code: 'KeyK',
        keyCode: 75,
        shiftKey: false,
        ctrlKey: false,
        metaKey: false
    })
);
 

Я что-то упускаю? keyCode и которые устарели, поэтому должна быть возможность создать рабочее событие без этих элементов. Я нигде не могу найти ответа на этот вопрос.

Я использую текущую версию Google Chrome (87). Я тестирую этот скрипт, отправляя kключ на YouTube для воспроизведения / паузы видео.

Комментарии:

1. возможно, их код ищет keyCode, а не key….

2. Отправка keydown события на самом деле не вызывает нажатия клавиш на клавиатуре.

3. @epascarello сделайте sens. Если они добавили ключ и код некоторое время назад, я думал, что они также улучшили код youtube, поскольку keycode устарел.

4. Вам нужно будет поговорить с их разработчиками 😉 устаревшие материалы не исчезают. Это похоже на то, что кто-то говорит «Не делай этого» 🙂

Ответ №1:

Статус «устаревший» в документации говорит вам, что вы не должны полагаться на эти атрибуты, присутствующие в событиях, которые вы получаете, потому что разработчики браузера планируют прекратить включать их в события, которые они создают.

Однако в этом случае вы имитируете ту часть кода, которую обычно выполняет браузер, при создании события. Ни у вас, ни у браузера нет никакого способа узнать, что будет искать код, получающий это событие.

Если вы оставите устаревшие атрибуты, вы эмулируете будущий браузер, и сайт YouTube, на котором вы тестируете, может быть, в настоящее время не готов к работе с этим будущим браузером. Вам лучше установить все атрибуты, которые текущий браузер установил бы для этого события.

Обратите внимание, что разработчики YouTube, хотя в конечном итоге работают в той же компании, что и разработчики Chrome, вероятно, имеют очень мало связей. Они будут регулярно обновлять свой код, чтобы следовать текущим рекомендациям, как любая хорошо управляемая команда разработчиков, но это требует времени и должно быть приоритетным среди всего остального, над чем они работают.