Подтвердить что ты не робот

Переопределение сочетаний клавиш браузера

Я хотел бы добавить поддержку сочетаний клавиш на пару страниц в своем веб-приложении, перехватив обработчик события нажатия клавиши объекта документа, а не атрибут accesskey.

Проблема заключается в том, что каждый браузер имеет свои собственные комбинации клавиш, поэтому невозможно создать набор комбинаций клавиш, которые работают на всех веб-браузерах и все же согласованы (например, было бы глупо, если бы ярлык для сохранения был Ctrl + Shift + S, в то время как один для удаления был Alt + D.)

Итак, я решил, что просто проще переопределить ярлыки браузеров всего на пару страниц с моей.

В любом случае, это возможно? Если да, как вы это делаете?

4b9b3361

Ответ 1

Здесь превосходное освещение здесь: http://unixpapa.com/js/key.html

Что касается того, нужно ли это делать, редактор вопросов в stackoverflow переопределяет довольно много клавиш, не слишком сильно перебирая (наведите указатель мыши на кнопки панели инструментов).

Ответ 2

onkeydown = function(e){
  if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){
    e.preventDefault();
    //your saving code
  }
}

Ответ 3

Вот мое решение этой проблемы:

Большинство (если не все) ярлыков браузера будут переопределены. Только системные, например Alt + Tab или Windows, не будут.

document.onkeydown = overrideKeyboardEvent;
document.onkeyup = overrideKeyboardEvent;
var keyIsDown = {};

function overrideKeyboardEvent(e){
  switch(e.type){
    case "keydown":
      if(!keyIsDown[e.keyCode]){
        keyIsDown[e.keyCode] = true;
        // do key down stuff here
      }
    break;
    case "keyup":
      delete(keyIsDown[e.keyCode]);
      // do key up stuff here
    break;
  }
  disabledEventPropagation(e);
  e.preventDefault();
  return false;
}
function disabledEventPropagation(e){
  if(e){
    if(e.stopPropagation){
      e.stopPropagation();
    } else if(window.event){
      window.event.cancelBubble = true;
    }
  }
}