Как отключить ключи Windows (ключ с логотипом и ключ меню) с помощью Javascript

Я пишу этот код Javascript, но он не отключает 2 клавиши Windows (я имею в виду клавишу с логотипом и клавишу меню), хотя:

document.onkeydown = function(e) {
    document.title = e.keyCode;
    if (e.keyCode == 91 || e.keyCode == 93) {
        window.event.keyCode = 0;
        window.event.returnValue = false;
        return false;
    }
};

2 утверждения window.xxx на самом деле не нужны, но я добавляю их, чтобы купить страховку (просто сомневаюсь, что e не полностью совпадает с window.event).

Поэтому я хотел бы задать этот вопрос: "Есть ли реальный способ, прямо или косвенно, выполнить эту работу в Javascript? "

2 ответа

Решение

Ваш код выглядит правильно, попробуйте узнать реальные коды клавиш с помощью этого простого скрипта:

document.onkeydown = checkKeycode
function checkKeycode(e) {
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  alert("keycode: " + keycode);
}

И чтобы отключить определенные клавиши, вы изменяете функцию (например, "Enter"):

document.onkeydown = checkKeycode
function checkKeycode(e) {
  var event = e || window.event;
  var keycode = event.which || event.keyCode;

  if (keycode == 13) {
    // return key was pressed
  }
}

JavaScript не может остановить действие клавиши с логотипом Windows, которая (после освобождения) должна вызывать меню "Пуск" окна. В сочетании с другими клавишами он имеет другие общесистемные эффекты (например, с M = свернуть все окна). Это то, что происходит вне контекста браузера, и поэтому не может и не должно блокироваться кодом, выполняющимся в вашем браузере.

Клавиша меню Windows может быть несколько отключена, как описано в этом ответе:

$(function(){
    var lastKey=0;
    $(window).on("keydown", document, function(event){
        lastKey = event.keyCode;            
    });

    $(window).on("contextmenu", document, function(event){
        if (lastKey === 93){
            lastKey=0;
            event.preventDefault();
            event.stopPropagation();
            return false;
        }
    });
});
Другие вопросы по тегам