javascript - addEventListener 无法在旧版 Chrome 中正确处理键

标签 javascript google-chrome addeventlistener event-listener userscripts

我正在尝试通过这样的用户脚本向网站添加事件监听器:

// ==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 中出于某种原因我得到的总是“否”,无论是 Spacejkl n 被按下。

这可能是什么问题?谢谢。

(我目前仅限于使用旧的 OSX,因此 Firefox 和 Chrome 都非常旧——Chrome 是 49——但我怀疑这应该是个问题……)

最佳答案

.key 属性为 not available in 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...

关于javascript - addEventListener 无法在旧版 Chrome 中正确处理键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52072024/

相关文章:

javascript - ajax加载后 Bootstrap 切换不起作用

javascript - 替换 async-await 到 then

javascript - 最好的 XHR 解决方案,用于 worker ?

google-chrome - 为什么 Chrome 开发者工具网络选项卡显示的大小比下载的文件大小小得多?

android - 使用 gmap3 的 Google map 无法在 Android 平板电脑上的 Chrome 浏览器 18 上正确呈现

javascript - 如何处理 “main.js:11 Uncaught TypeError: Cannot read property ' addEventListener的“null”这样的错误?

JavaScript 发送元素到 addEventListener 函数

Javascript Web Worker - 如何忽略除最后一条消息之外的所有消息?

google-chrome - Chome 61、ChromeDriver 2.32 单击移动设备模拟器的元素会引发 WebDriverException : unknown error: Element is not clickable at point

javascript - object.addEventListener 的 useCapture 参数的用途是什么?