keyCode 和哪些已弃用 - 那为什么不起作用?

问题描述

根据MDN Web Docs KeyboardEventGoogle Updates KeyboardEventkeycode实现,而keyCodewhich 已弃用。

考虑到这一点,我应该能够按如下方式发送 keydown 事件:

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

不幸的是它不起作用,而如果我另外添加 keyCode 这个脚本可以完美运行。带有 keyCode 的对象:

document.dispatchEvent(
    new KeyboardEvent("keydown",keyCode: 75,MetaKey: false
    })
);

我错过了什么吗? keyCodewhich 已弃用,因此应该可以在没有这些元素的情况下创建工作事件。我找不到任何答案。

我使用的是当前版本的 Google Chrome (87)。我通过向 YouTube 发送 k 键来播放/暂停视频来测试这个脚本。

解决方法

文档中的“已弃用”状态告诉您,您不应该依赖接收到的事件中存在的那些属性,因为浏览器开发人员是计划停止将他们加入他们创建的活动

但是,在这种情况下,您正在模拟浏览器通常会在创建事件时执行的代码部分。您和浏览器都无法知道接收该事件的代码将寻找什么。

如果您忽略已弃用的属性,则您正在模拟 未来 浏览器,而您正在测试的 YouTube 网站目前可能无法与该未来浏览器配合使用。您最好设置当前浏览器为该事件设置的所有属性。

请注意,YouTube 的开发者虽然最终与 Chrome 的开发者受雇于同一家公司,但他们之间的联系可能很少。他们将定期更新代码以遵循当前的最佳实践就像任何运行良好的开发团队一样,但这需要时间,并且必须在他们正在处理的所有其他事情中优先考虑。