Como posso sair do modo Pass Through em Pentadactyl quando a tecla Escape é capturada?

2

Etapas para reproduzir:

  1. Visite esta página . É um JSFiddle consistindo inteiramente de

    window.onkeydown = function(e) { e.preventDefault(); };
    
  2. Clique dentro da área cinza, abaixo da barra branca superior, para dar foco à área principal.

  3. Pressione Ctrl + Z para entrar no modo Passar.

  4. Pressione Esc . Isso falhará, porque a chave é interceptada pelo JavaScript e nunca enviada para Pentadactyl.

Isso é fácil de atenuar no exemplo, clicando na barra superior para transferir o foco para longe da área que contém o onkeydown , permitindo que o escape passe e saia do modo Passagem. No entanto, estou trabalhando com um site que intercepta as teclas all (com preventDefault ) via window.onkeydown , portanto não há para onde transferir o foco.

A única solução que consegui encontrar é criar uma nova guia e fechá-la ( d ). No entanto, isso exige o uso do mouse (pois o atalho t não funciona mais porque estamos no modo Pass Through) e é uma solução alternativa hacky.

Existe alguma maneira de sair do modo Pass Through apenas com o teclado, em um site que intercepta todas as teclas pressionadas?

    
por Doorknob 02.04.2015 / 04:06

1 resposta

2

  • No JSFiddle, você ligou, pelo menos, Ctrl - TAB e Ctrl - Deslocamento - TAB ainda funciona, assim você pode mudar para a próxima aba e voltar para cancelar o modo de passagem. Por alguma razão, você ainda não pode acessar a linha de comando, mas outras teclas funcionam, então você sempre pode atualizar a página com r para corrigir isso.

  • Como uma solução menos agressiva, você pode definir um comando no seu arquivo .pentadactylrc para impedir que a página roube os principais eventos:

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

    Então, se você executar :nointercept na página antes de clicar na área principal, poderá escapar do modo de passagem. Com esse método, a linha de comando funciona normalmente depois de sair do modo de passagem.

    Se você quiser apenas interromper a página interceptando a tecla Esc , você pode modificar o comando para testar e.keyCode===27 .

  • Se você quiser aplicar o código acima automaticamente, poderá transformá-lo em um userscript (requer Greasemonkey como você provavelmente sabe). O seguinte deve funcionar se você preencher os URLs ou os padrões de URL corretos após @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
    );
    
por 12.05.2015 / 08:12