Поймать Command+R в Safari с помощью JQuery

Мне нужно перехватить функцию перезагрузки браузера в Safari (я знаю, что обычно этого делать не следует, но в моем случае это имеет смысл).

Для Windows я просто делаю это:

$(document).keydown(function(event) {
    if ( event.which == 116 ) {
        restart();
        return false;
    }
});

Нужно ли использовать подключаемый модуль JQuery для захвата двух ключей одновременно или это уже реализовано в JQuery в той или иной форме?

Кроме того, коды клавиш под Mac такие же, как и под Windows? («Команда» — это код клавиши «17», а «r» — «19»?) Или это «55» для командной клавиши и «15» для «r»?

(с использованием этого источника: http://boredzo.org/blog/archives/2007-05-22/virtual-key-codes


person Christian Strang    schedule 12.10.2011    source источник
comment
Я был бы piiiiiiisssseeed, если бы кто-то отскочил cmd + r, чтобы сделать что-то кроме жесткой перезагрузки страницы!   -  person Christian    schedule 12.10.2011
comment
Обычно я полностью согласен с вами, но поверьте мне, в этом случае это имеет смысл   -  person Christian Strang    schedule 12.10.2011


Ответы (3)


Существует плагин Jquery для захвата событий клавиатуры, и самое приятное то, что он позволит вам обрабатывать ключевые события с их именами. Например, если вы хотите захватить CTRL + R, вам не нужно беспокоиться о кодах клавиш, плагин справится с этим сам.

Проверьте это здесь: https://keithamus.github.io/jwerty/

person Prashant    schedule 12.10.2011
comment
Это выглядит как интересный плагин для его обработки, но я стараюсь максимально минимизировать http-запросы и действительно хотел бы избежать другого плагина. - person Christian Strang; 12.10.2011
comment
Просто хотел упомянуть, что jwerty не обязательно является плагином jQuery. Он совместим с jQuery, но может использоваться и автономно. Кроме того, Кристиан, если вы беспокоитесь о нескольких HTTP-запросах, вам действительно следует минимизировать весь код javascript в один файл для обслуживания. Взгляните на компилятор закрытия или Uglify JS - person Keithamus; 27.01.2012

Я думаю, что понял это без использования плагина. Позже я проверю, работает ли он на Mac (у меня его нет), но он работает для CTRL + R на ПК:

var keys = {};

$(document).ready(function(){
    $(document).keydown(function(event) {
        keys[event.which] = true;

        //CTRL+R on a PC    
        if(keys[17] && keys[82])
        {
            restart();
            return false;
        }   

        //COMMAND+R an a Mac    
        if(keys[81] && keys[91])
        {
            restart();
            return false;
        }       
    });

    $(document).keyup(function (event) {
        delete keys[event.which];
    });
});

Это помогло мне добраться туда: jQuery .keypress() обнаруживает более одной клавиши одновременно?

person Christian Strang    schedule 12.10.2011

Вы можете поймать + R на Mac, используя следующий код:

$(document).on( 'keydown', function(event){
    if( event.which === 82 && event.metaKey ) {
        alert( 'Your changes will be lost, are you sure to refresh?' );
    }
});

.metaKey означает на Mac и ключ на ПК.

person Community    schedule 26.07.2016
comment
У меня та же проблема, но при нажатии cmd+r событие вообще не срабатывает. Запускается с помощью cmd+shift+r. Любая идея? Может быть, проблема в том, что я привязываю обработчик к «окну» - person Bernhard; 12.11.2016