Comment puis-je quitter le mode Pass Through dans Pentadactyl lorsque la touche Échap est capturée?

2

Étapes à suivre pour reproduire:

  1. Visitez cette page . C’est un JSFiddle entièrement composé de

    window.onkeydown = function(e) { e.preventDefault(); };
    
  2. Cliquez à l'intérieur de la zone grise, sous la barre blanche supérieure, pour mettre en évidence la zone principale.

  3. Appuyez sur Ctrl+ Zpour passer en mode Pass Through.

  4. Appuyez sur Esc. Cela échouera, car la clé est interceptée par JavaScript et n'est jamais envoyée à Pentadactyl.

Ceci est facile à atténuer dans l'exemple en cliquant sur la barre supérieure pour transférer le focus de la zone contenant le onkeydown, ce qui permet à Escape de traverser et de quitter le mode Pass Through. Cependant, je travaille avec un site qui intercepte toutes les pressions sur une touche (avec preventDefault) via window.onkeydown, de sorte qu'il n'y a nulle part où transférer le focus.

La seule solution que j'ai pu trouver est de créer un nouvel onglet, puis de le fermer ( d). Toutefois, cela nécessite l’utilisation de la souris (le traccourci ne fonctionnant plus car nous sommes en mode Pass Through), et c’est une solution de contournement simpliste.

Existe-t-il un moyen de quitter le mode Pass Through avec le clavier uniquement, sur un site qui intercepte toutes les pressions de touche?

Poignée de porte
la source

Réponses:

2
  • Sur le JSFiddle que vous avez lié, au moins, Ctrl- TABet Ctrl- Shift- TABfonctionne toujours, vous pouvez donc basculer vers l’onglet suivant, puis revenir en arrière pour annuler le mode de transfert direct. Pour une raison quelconque, vous ne pouvez toujours pas accéder à la ligne de commande, mais d'autres clés fonctionnent, vous pouvez donc toujours actualiser la page rpour résoudre ce problème.

  • En tant que solution moins compliquée, vous pouvez définir une commande dans votre fichier .pentadactylrc pour empêcher la page de voler des événements clés:

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

    Ensuite, si vous exécutez :nointerceptsur la page avant de cliquer sur la zone principale, vous pourrez sortir du mode passerelle. Avec cette méthode, la ligne de commande fonctionne normalement après avoir quitté le mode intercalaire.

    Si vous souhaitez uniquement arrêter la page interceptant la Escclé, vous pouvez modifier la commande à tester e.keyCode===27.

  • Si vous souhaitez appliquer le code ci-dessus automatiquement, vous pouvez le transformer en un script utilisateur (nécessite Greasemonkey comme vous le savez probablement). Ce qui suit devrait fonctionner si vous remplissez les URL ou les modèles d’URL appropriés aprè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
    );
    
pyrocrasty
la source