JavaScript如何监听键盘快捷键?

3

我尝试使用JavaScript监听键盘的快捷键,例如“command+shift+4”
目前我的解决方案是:[在Mac上]

window.addEventListener('keypress', function(e){
    if (e.shiftKey && e.metaKey && e.keyCode == 52) {
        alert("Here it is.");
    }
}, false);

但是由于"command+shift+4"快捷键是Mac的默认截图快捷键,所以JavaScript无法捕获它。如果我将52改为53,则此代码可以工作,但它会监听"command+shift+5"快捷键。
是否有一些解决方案可以让JavaScript监听Mac的默认快捷键?


1
优先级是操作系统。如果它允许冒泡事件 - 你可以监听。否则,抱歉 :( 你能想象 ALT+F4 被 JavaScript 阻止吗?那至少会非常恼人。 - undefined
由主机决定将哪些事件分派到文档中。如果文档没有收到事件,它就无法做出响应。 - undefined
1个回答

4
您的浏览器运行在操作系统之下。如果您在操作系统级别上“捕获”了按键事件并且不允许其通过(想象一下e.stopPropagation()),那么您将无法在浏览器中捕获它。这就像您试图绑定Alt+F4 - 在事件到达浏览器的页面事件之前,此事件已经被处理了。有些事件可能会通过,而有些事件则可能不会通过。
如果可以的话,请将快捷方式更改为独立于操作系统/浏览器的快捷方式。 避免使用这些键盘快捷键。另外,您可能想要阅读此SO问题。 为了确保您的快捷键能够正确识别,只需输出您的按键即可。
window.onkeyup = function(e){
    var pressed = "";
    if(e.shiftKey){
        pressed += " + Shift";
    }else if(e.ctrlKey){
        pressed += " + Ctrl";
    } //and so on
    pressed += e.keyCode;
    console.log(pressed);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接