Как выйти из режима Pass Through в Pentadactyl, когда нажата клавиша Escape?

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

  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 ответ

  • На 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
    );
    
Другие вопросы по тегам