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 57

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 the event.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.


спасибо @ Lime великого ссылке.

по состоянию на 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.