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

487
Doorknob

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

  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, используя только клавиатуру, на сайте, который перехватывает все нажатия клавиш?

2

1 ответ на вопрос

2
pyrocrasty
  • На 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 );