2

Действия по воспроизведению:

  1. Посетите эту страницу. Это JSFiddle, состоящий полностью из

    window.onkeydown = function(e) { e.preventDefault(); };
    
  2. Щелкните внутри серой области под белой верхней панелью, чтобы выделить основной участок.

  3. Нажмите Ctrl+Z, чтобы войти в режим Pass Through.

  4. Нажмите Esc. Это не удастся, потому что ключ перехватывается JavaScript и никогда не отправляется в Pentadactyl.

Это легко устранить в примере, нажав на верхнюю панель, чтобы переместить фокус в область, содержащую onkeydown , что позволит Escape пройти и выйти из режима Pass Through. Тем не менее, я работаю с сайтом, который перехватывает все нажатия клавиш (с помощью preventDefault) через window.onkeydown , поэтому некуда перенести фокус.

Единственное решение, которое мне удалось найти, - это создать новую вкладку и затем закрыть ее (d). Однако это требует использования мыши (так как ярлык t больше не работает, потому что мы в режиме Pass Through), и это обходной путь.

Есть ли способ выйти из режима Pass Through, используя только клавиатуру, на сайте, который перехватывает все нажатия клавиш?

1 ответ1

2
  • На JSFiddle, который вы связали, по крайней мере, Ctrl - TAB и Ctrl - Shift - TAB по- прежнему функционируют, так что вы можете переключиться на следующую вкладку и вернуться, чтобы отменить режим прохода. По какой-то причине вы все еще не можете получить доступ к командной строке, но другие ключи работают, поэтому вы всегда можете обновить страницу с помощью r, чтобы это исправить.

  • Как менее хакерское решение, вы можете определить команду в вашем файле .pentadactylrc, чтобы остановить кражу ключевых событий страницы:

    command! nointercept -js document.addEventListener('keydown', function(e) { e.stopImmediatePropagation(); return false;}, true);
    

    Затем, если вы выполните :nointercept на странице, прежде чем щелкнуть по основной области, вы сможете выйти из режима сквозного просмотра. При использовании этого метода командная строка работает нормально после выхода из режима сквозного просмотра.

    Если вы хотите только остановить страницу, перехватывающую клавишу Esc , вы можете изменить команду для проверки e.keyCode===27 .

  • Если вы хотите применить приведенный выше код автоматически, вы можете превратить его в пользовательский скрипт (как вы, вероятно, знаете, Greasemonkey ). Следующее должно работать, если вы введете правильные URL или шаблоны URL после @include

    // ==UserScript==
    
    // @name           nointercept
    // @description    Prevent site from stealing key presses
    
    // @run-at         document-start
    // @include        http://site.url        
    
    // ==/UserScript==        
    
    document.addEventListener(
        'keydown',
        function(e) { e.stopImmediatePropagation(); return false; },
        true
    );
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .