Web浏览器无法捕获Windows键+ D,为什么?

问题描述:

Web浏览器无法捕获Windows快捷键。例如,Windows键+ D显示桌面。Web浏览器无法捕获Windows键+ D,为什么?

但是,在浏览器中,JS只能检测到Windows键的keydown事件,但无法捕获D的键盘事件或windows键的keyup事件。

它背后的深层原因是什么?有没有解释它的文件?

+5

我认为Windows热键不会转发给浏览器。它将在核心处理 – 2015-02-09 07:06:22

+3

Mac上的Windows Key如何? – Justinas 2015-02-09 07:09:10

+0

Mac上的Windows键是我的命令。 – steviesama 2017-09-05 20:42:36

不是一个理想的答案,但您可能需要编辑Windows注册表以使其发生。

  1. 在注册表中禁用Windows + D。 See this answer
  2. 使用下面的代码捕获密钥。 Source

var log = $('#log')[0], 
 
    pressedKeys = []; 
 

 
var prevKey; 
 

 
$(document.body).keydown(function (evt) { 
 
    var li = pressedKeys[evt.keyCode]; 
 
    if (!li) { 
 
     li = log.appendChild(document.createElement('li')); 
 
     pressedKeys[evt.keyCode] = li; 
 
    } 
 
    $(li).text('Down: ' + evt.keyCode); 
 
    $(li).removeClass('key-up'); 
 
    
 
    if(prevKey){ 
 
     if(prevKey === 91 && evt.keyCode === 68){ 
 
      evt.stopPropagation(); 
 
     } 
 
    } 
 
    
 
}); 
 

 
$(document.body).keyup(function (evt) { 
 
    var li = pressedKeys[evt.keyCode]; 
 
    if (!li) { 
 
     li = log.appendChild(document.createElement('li')); 
 
    } 
 
    $(li).text('Up: ' + evt.keyCode); 
 
    $(li).addClass('key-up'); 
 
});
.key-up { 
 
    opacity: 0.5; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="log"> 
 
    <li>List of keys:</li> 
 
</ul>

视窗+ d是由OS捕获,并且不转发给浏览器。可能的解决方法是使用Ctrl + Windows + D来模拟Windows + D。