Переопределение сочетаний клавиш браузера
Я хотел бы добавить поддержку сочетаний клавиш на пару страниц в своем веб-приложении, перехватив обработчик события нажатия клавиши объекта документа, а не атрибут accesskey.
Проблема заключается в том, что каждый браузер имеет свои собственные комбинации клавиш, поэтому невозможно создать набор комбинаций клавиш, которые работают на всех веб-браузерах и все же согласованы (например, было бы глупо, если бы ярлык для сохранения был Ctrl + Shift + S, в то время как один для удаления был Alt + D.)
Итак, я решил, что просто проще переопределить ярлыки браузеров всего на пару страниц с моей.
В любом случае, это возможно? Если да, как вы это делаете?
Ответы
Ответ 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;
}
}
}