【问题标题】:Chrome extension: adding a keyboard shortcut with Alt with addEventListener('keypress')Chrome 扩展:使用 Alt 和 addEventListener('keypress') 添加键盘快捷键
【发布时间】:2020-01-04 00:06:34
【问题描述】:

我正在这样做open source chrome extension,我想添加一个快捷方式,以便在打开扩展程序并按下Alt+C 时,将 div 的内容复制到我的剪贴板。

我可以使用简单的addEventListener 添加快捷方式:

var inputText = document.getElementById('textareaSource');
    inputText.addEventListener('keypress', function (e) {
        if (e.keyCode == 99) {        
            // alert("You pressed C!");
        }
});

但显然这种添加快捷方式的方式不允许包含Alt 的快捷方式。我试过了,但没有收到任何警报:

if (e.altKey || e.ctrlKey || e.shiftKey)
    alert("you pressed one of the 'Alt', 'Ctrl', or 'Shift' keys")
}

我还可以通过manifest/background.js(在thisthis 之后)添加快捷方式。这一次,Alt+C 有效,但它可以在 Chrome 上的任何地方触发,而不仅仅是在我的扩展程序打开时。

有没有一种折中的方法:添加一个包含 Alt 的快捷方式,只有在我的扩展程序打开时才会触发?

【问题讨论】:

  • keypress 用于产生未修改的字母或数字的事件,因此您很可能需要keydown

标签: javascript google-chrome-extension keyboard-shortcuts


【解决方案1】:

keypress 事件不会在按下修饰键时触发,此外,现在它已被弃用。

正如on the MDN 所说,您应该考虑改用keydown 事件,它支持您尝试过的方式。

event.keyCode 也已被弃用,而应使用event.key

所以这段代码应该可以工作:

var inputText = document.getElementById('textareaSource');
    inputText.addEventListener('keydown', function (e) {
        if (e.key == "c" && e.altKey) {        
            // alert("You pressed Alt + C!");
        }
});

【讨论】:

  • 非常感谢。最后一个问题:如何捕捉Alt+Enter?它不适用于keydown
  • @MagTun 我注意到event.keyCode 也已被弃用,所以我已将其替换...
  • 抱歉,我不够清楚:我用keydown 尝试了这个if (e.key == 13 && e.altKey) 来捕捉Alt+Enter,但它不起作用
  • e.key 返回字符串而不是字符代码,因此您应该尝试 e.key==='Enter'...
  • 对不起,我应该检查一下这个。非常感谢您的耐心等待!
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多