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

Ярлыки браузера захвата javascript (ctrl + t/n/w)

Можно ли записать эти ярлыки?

  • Ctrl + N
  • Ctrl + T
  • Ctrl + W

Я пробовал это, но он не работает:

$(window).keydown(function(event) {
  console.log(event.keyCode);
  event.preventDefault();
});

Когда я нажимаю T, он показывает 84 в консоли, но если я нажимаю Ctrl + T, он ничего не показывает и открывает новую вкладку.

Я хотел бы захватить эти ярлыки и предотвратить любое действие браузера.

4b9b3361

Ответ 1

Захват событий 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 работает как прослушиватель событий. Если вы нажмете клавиши Ctrl T или Ctrl S, вы получите оба сообщения на консоли, и браузер не откроет вкладку и не попросит сохранить.

Интересно, что если вы используете alert вместо console.log, то event.preventDefault() не работает и открывает новую вкладку или запрашивает сохранение. Возможно, эта ошибка должна быть исправлена.


Chrome3

В Chrome 3 он работает как в Firefox.


Chrome4

<суб > (проверено)суб >

В Chrome4 определенные комбинации клавиш управления зарезервированы для браузера только для использования и больше не может быть перехвачена клиентской стороной JavaScript на веб-странице.
Эти ограничения не существовали в Chrome3 и несовместимы с обоими Firefox3/3.5 и IE7/8 (в Windows).

В Chrome 4 он работает аналогично Firefox, за исключением некоторых комбинаций клавиш:

  • Ctrl N

  • Ctrl Shift N

  • Ctrl T

  • Ctrl Shift T

  • Ctrl W

  • Ctrl Shift W

Эти комбинации не могут быть захвачены Javascript, , но встроенные плагины могут их захватить. Например, если вы фокусируетесь на видео Youtube и нажмите Ctrl T, браузер не откроет новую вкладку.


IE7/8

Он работает как в Firefox, так и в Chrome3.


IE9

<суб > (проверено)суб >

IE9 снова является черной овцой, потому что он не позволяет javascript захватывать любое событие клавиатуры Ctrl ?. Я тестировал множество клавиш (R, T, P, S, N, T) и не работал. Также встроенные приложения не могут захватить событие. Протестировано видео Youtube.


Благодаря @Lime для ссылки .

Ответ 2

По состоянию на 20 марта 2012 года исправление Chrome позволяет веб-приложениям обрабатывать Control + NWT в Chrome в событии js keydown (поэтому он работает в чистом javascript или в любой библиотеке, такой как jQuery).

Это исправление позволяет javascript обрабатывать эти комбинации клавиш, если Chrome открыт в режиме приложения, что можно сделать следующим образом:

Исправление зафиксировано здесь:

Ответ 3

Чтобы расширить другие ответы:

Код для блокировки определенных комбинаций в Chrome/Chromium определен здесь, im summary, F11 для выхода из полноэкранного режима и всего, что манипулирует и блокировка вкладок или окон заблокирована:

[ Shift ] Ctrl ( Q | N | W | T | Tab ↹ )

Ответ 4

Вместо того, чтобы удерживать горячую клавишу Ctrl + W, обнаруживать, когда окно закрыто, может быть допустимым:

"Событие beforeunload запускается, когда окно, документ и его ресурсы будут выгружены.

Если для свойства returnValue Event присваивается непустая строка, появляется диалоговое окно с просьбой о том, чтобы пользователи могли покинуть страницу (см. пример ниже). Если значение не указано, событие обрабатывается молча. "

Ответ 5

Ответ на самом деле прост: это невозможно напрямую без каких-либо трюков в javascript.

Это зависит от браузера. В основном все браузеры используют эти ярлыки и используют их для своих событий. (например, открыть новые вкладки) Ярлык никогда не доходит до механизма javascript.

Тем не менее, можно легко поймать ярлыки со вспышкой. Но это далеко от дружественного пользователю сайта.

Update:

Вот краткий пример. В большинстве случаев браузер отображает предупреждение при нажатии 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.

Ответ 6

Я тестировал в хроме и краю, хром не может выделить Ctrl + T, но край может.