javascript capture browser shortcuts (ctrl+t/n / w)
можно ли захватить эти ярлыки?
- Ctrl+N
- Ctrl+T
- Ctrl+ W
Я пробовал это, но это не работает:
$(window).keydown(function(event) {
console.log(event.keyCode);
event.preventDefault();
});
когда я нажимаю T это показывает 84
в консоли, но если я нажимаю Ctrl+T он ничего не показывает, и открывает новую табуляция.
Я хотел бы захватить эти ярлыки и предотвратить любые действия браузера.
5 ответов:
захват Ctrl события клавиатуры в Javascript
пример кода:
$(window).keydown(function(event) { if(event.ctrlKey && event.keyCode == 84) { console.log("Hey! Ctrl+T event captured!"); event.preventDefault(); } if(event.ctrlKey && event.keyCode == 83) { console.log("Hey! Ctrl+S event captured!"); event.preventDefault(); } });
Firefox
(6.0.1 проверяли)
в Firefox работает оба прослушивателя событий. Если вы нажмете CtrlT или CtrlS комбинации клавиш, вы получите как сообщение на консоли, так и браузер не откроет вкладку и не попросит сохранить.
это интересно, что если вы используете
alert
вместоconsole.log
theevent.preventDefault()
не работает, а открывает новую вкладку или просит спасти. Может быть, эта ошибка должна быть исправлена.
Chrome3
в Chrome 3 он работает как в Firefox.
Chrome4
(проверено)
в Chrome4 некоторые комбинации клавиш управления были зарезервированы для браузера использование только и больше не может быть перехвачено JavaScript на стороне клиента на веб-странице.
Эти ограничения не существовали в Chrome3 и несовместимы с обоими Firefox3 / 3.5 и IE7 / 8 (на Windows).в Chrome 4 он работает аналогично Firefox, за исключением некоторых клавиатуры комбинация:
CtrlN
CtrlShiftN
CtrlT
CtrlShiftT
Ctrl W
CtrlShift W
эти комбинации не могут быть захвачены Javascript,но встроенные плагины могут захватить их. Например, если вы фокусируетесь на видео Youtube и нажимаете CtrlT браузер не открывает новую вкладку.
IE7 / 8
он работает как в Firefox или Chrome3.
IE9
(проверено)
IE9 снова черная овца, потому что он не позволяет javascript захватывать любой Ctrl? событие клавиатуры. Я тестировал со многими комбинациями клавиш (R,T,P,S,N,T) и ни один из них не работал. Также встроенные приложения не могут захватить событие. Протестировано с видео Youtube.
по состоянию на 20 марта 2012 года было исправлено Chrome, которое позволяет веб-приложениям обрабатывать Control+NWT в Chrome в событии JS keydown (поэтому он работает в чистом javascript или любой библиотеке, такой как jQuery).
это исправление позволяет javascript обрабатывать эти комбинации клавиш, если Chrome открыт в режиме приложения, что можно сделать следующим образом:
исправление задокументировано здесь:
чтобы расширить другие ответы:
код для блокировки определенных комбинаций в Chrome / Chromium определяется, im резюме,F11 для выхода из полноэкранного режима и все манипуляции и перемещения вкладок или окон заблокировано:
[Shift]Ctrl(Q/N/ W/T/Tab ↹)
вместо захвата Ctrl+ W горячая клавиша,определить, когда окно закрыто может быть допустимым вариантом:
"событие beforeunload запускается, когда окно, документ и его ресурсы собираются быть выгружены.
Если свойству события returnValue назначена непустая строка, появляется диалоговое окно с запросом на подтверждение покинуть страницу (см. пример ниже). Если значение не указано, событие обрабатывается молча."
ответ очень прост: это невозможно напрямую без некоторых трюков в javascript.
Это зависит от браузера. В основном все браузеры ловят эти ярлыки и используют их для своих собственных событий. (например, откройте новые вкладки) ярлык никогда не достигнет движка javascript.
что легко возможно, однако, чтобы поймать ярлыки с flash. Но это далеко от удобного для пользователя веб-сайта.
обновление:
здесь коротко образец. В основном все браузер покажет предупреждение, когда Ctrl+y нажата. (y = 89)
document.onkeydown = keyDownEvent; document.onkeyup = keyUpEvent; var isCtrl = false; function keyDownEvent() { var keyid = event.keyCode; if(keyid == 17) { isCtrl = true; } } function keyUpEvent() { var keyid = event.keyCode; if(keyid == 17) { isCtrl = false; } if(keyid == 89 && isCtrl == true) { alert('CTRL-Y pressed'); } }
Если вы замените 84 на 89, что представляет собой t ничего не будет. Вы можете попробовать ВКЛ jsfiddle.net.