Comment interdire le vol de raccourcis clavier par des sites Web dans Firefox

57

De nombreux sites Web, en particulier tout ce qui concerne l'édition de texte enrichi (ce site est également coupable), volent des raccourcis clavier normalement utilisés pour contrôler Firefox et leur demandent de faire autre chose. C’est totalement exaspérant d’appuyer sur quelque chose comme Cmd-number, Cmd-L, Cmd-T ou Cmd-K et cela ne fait pas ce que je veux. Puis-je le faire arrêter?

En fait, ce serait probablement mieux si je pouvais interdire le vol de tous les raccourcis Cmd- *. Je ne les ai jamais vus utilisés pour quelque chose d'utile. C'est possible?

taw
la source
4
D'accord, c'est exaspérant. FogBugz a une très bonne implémentation des raccourcis clavier. CTRL-;passe en mode raccourci et met en surbrillance toutes les commandes visibles à l’écran avec les raccourcis disponibles. Chaque raccourci est une liste déroulante, donc les nouveaux cas CTRL-; Net les modifications sont CTRL-; E. Très facile de s'y habituer et zéro conflit. Je souhaite que plus de sites utilisent quelque chose comme ceci car c'est plus facile pour l'utilisateur et ne remplace pas les raccourcis du navigateur. Dommage que SuperUser ne le fasse pas car il provient des mêmes personnes que FogBugz.
Sam
Voir aussi superuser.com/questions/399352/…
mécanique
1
Ceci est discuté lors de cette demande de fonctionnalité sur Bugzilla .
Escargot mécanique
Je visite beaucoup de pages intranet au travail qui gâchent cmd + N, je ne peux donc jamais ouvrir de nouvelles fenêtres de navigateur à partir du clavier! Si ennuyant!
Nicolas Miari
1
Après environ 12 ans, Mozilla a stabilisé une solution assez raisonnable pour résoudre ce problème. C'est bien caché et imparfait, mais cela pourrait sauver votre santé mentale. S'il vous plaît voir ma réponse ici: superuser.com/a/1317514/158390
Lambart

Réponses:

24

Grâce à la nouvelle @run-atpropriété de Greasemonkey , c'est maintenant possible!

Je me suis inspiré de ce script et de ce script pour les combiner en un script utilisateur qui intercepte avec succès les raccourcis clavier Ctrl+ Tet Ctrl+ S. J'ai testé dans Firefox 17 ESR et Firefox 25.

// ==UserScript==
// @name           Disable Ctrl+s and Ctrl+t interceptions
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

// Keycode for 's' and 't'. Add more to disable other ctrl+X interceptions
keycodes = [83, 84];  

(window.opera ? document.body : document).addEventListener('keydown', function(e) {
    // alert(e.keyCode ); //uncomment to find more keyCodes
    if (keycodes.indexOf(e.keyCode) != -1 && e.ctrlKey) {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    // alert("Gotcha!"); //ucomment to check if it's seeing the combo
    }
    return false;
}, !window.opera);
Martin JH
la source
1
C'était très utile. Les utilisateurs d' OS X devraient échanger sur e.ctrlKeypour e.cmdKeyet e.cmdKey && e.shiftKeyde récupérer la plupart de leurs raccourcis navigateur.
JamesGecko
Ce script me permet de réparer CTRL + TAB en ajoutant 9des éléments au tableau de codes de clés. Merci!
Mike Mueller
@JamesGecko Si vous avez découvert cette réponse, vous devriez / pourriez utiliser e.metaKey pour la clé de commande.
Riezebosch
3
Ce code fonctionne! Gardez à l'esprit qu'il filtre non seulement Ctrl + Touche, mais aussi Ctrl + Alt + Touche, Ctrl + Maj + Touche et Ctrl + Alt + Maj + Touche, car il ne fait que vérifier l'état du modificateur Ctrl.
RomanSt
Première question: pour un script réputé fonctionner sur Firefox, pourquoi vérifie-t-il si le navigateur est Opera? Et deuxième question: le commentaire dit les codes de caractère pour "s" et "t", mais les codes sont vraiment pour "S" et "T". Dois-je spécifier le code majuscule pour une raison quelconque? Merci.
Douglas a tenu
8

Onze ans après le dépôt du bogue, Mozilla a finalement réussi à travailler sur cette demande de fonctionnalité populaire, et cela semble fonctionner correctement (testé dans Firefox 66.0.3 / Ubuntu).

(Merci à @PerJohansson d'avoir signalé qu'ils ont rendu le réglage beaucoup plus difficile à trouver depuis 59 FF.)

Vous pouvez désactiver les raccourcis de site en procédant comme suit:

  1. Cliquez sur l' (i)icône dans la barre d'adresse
  2. Cliquez sur la petite flèche ( >) à droite de l'élément d'état "Connexion".
  3. Maintenant, vous devriez voir More Informationen bas. Cliquez dessus pour accéder à la Page Infoboîte de dialogue.
  4. Enfin, allez dans l' Permissionsonglet et ajustez le Override Keyboard Shortcutsréglage

Voici quelques captures d'écran récentes (mai 2019) pour chaque étape:

Capture d'écran de la boîte de dialogue Informations sur le site Firefox

Capture d'écran de la boîte de dialogue Firefox Site Security

Capture d'écran de l'onglet Firefox Permissions

Si l'historique de ce correctif vous intéresse, voici les billets Mozilla associés: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 et https://bugzilla.mozilla.org/show_bug.cgi. ? id = 1445942

Lambart
la source
2
Dans Firefox 64 (vous ne savez pas où il est apparu), vous devez cliquer sur "Connexion" => "Plus d'informations" pour accéder à cette boîte d'idalog. La molette des autorisations va plutôt dans les Préférences, ce qui n’est pas le bon endroit.
Per Johansson le
Merci @PerJohansson, j'ai mis à jour le billet.
Lambart le
Quelle est l' about:configoption pour changer la valeur par défaut? Je veux forcer tous les sites à ne pas pouvoir se connecter à mon clavier
inetknght
5

Des recherches approfondies montrent qu’à partir de la version actuelle de Firefox (3.6.x), c’est impossible - tous les conflits de reliure de clés sont résolus avec les priorités: Système> Site Web> Firefox - un ordre plutôt stupide. Aucun des addons que j'ai essayés ne semble pouvoir le résoudre.

Peut-être que cela deviendra possible dans les versions futures, mais pour l’instant, la réponse est: impossible.

taw
la source
1
Utiliser FF 30.0 près de 4 ans plus tard et le problème persiste. Je vais essayer l'idée de Martin Greasemonkey.
LGT
2
Utiliser FF 53.0 près de 8 ans plus tard et le problème persiste.
Daniel
5

Étant donné que les problèmes semblent être des événements de clavier JavaScript volés au clavier, ne serait-il pas possible de créer un script JavaScript (à utiliser via Greasemonkey) qui délie tous ces événements de clavier, renvoyant ainsi la bonne utilisation de chaque raccourci au navigateur?

Je ne sais pas si cela est réalisable, mais quelqu'un avec plus d'expérience en JavaScript / Greasemonkey pourrait peut-être vous aider (cela pourrait valoir la peine de demander à SO).

DMA57361
la source
2
Cela fonctionne par le biais du mécanisme onKeyPress - Firefox envoie d’abord chaque touche sur le site Web et ne la vérifie ensuite que si elle n’a pas été annulée ou interceptée. Une certaine magie de Greasemonkey qui permettrait d’intercepter les pressions de touche avant le site Web et d’exécuter les fonctions directement de Firefox pourrait être possible, mais c’est loin d’être une évidence.
taw
4

Le problème est que n'importe quelle page peut exécuter du Javascript qui configure un gestionnaire d'événements pour saisir les événements de frappe, et les contrôles javascript de Firefox ne sont pas suffisamment détaillés pour l'arrêter sans casser d'autres fonctionnalités javascript.

Le seul moyen d'éviter cela est de désactiver le Javascript (Outils -> Options, onglet [Contenu], décochez la case Activer JavaScript ). Ou vous pouvez désactiver le Javascript sur chaque site avec une extension telle que NoScript.

Firefox vous permet d'empêcher certaines utilisations de Javascript, telles que le déplacement / redimensionnement de fenêtres, la modification ou la désactivation du menu contextuel, etc. mais rien n'empêche les sites Web d'intercepter les événements de clavier.

Peut-être y a-t-il une extension qui donne ce niveau de contrôle - je n'en connais pas.
Il existe des options Javascript , mais cette extension n'est plus mise à jour.

njd
la source
2
Les options Javascript et quelques autres extensions que j'ai essayées ne supportent pas ceci. Bloquer tout le javascript rendrait le Web pratiquement inutilisable, ce n'est pas vraiment une option.
Taw
0

Il est probable que les plugins tiers prennent le focus depuis la fenêtre principale du navigateur. Dans ce cas, l'entrée du clavier (à l'exception des interruptions) sera interceptée par le plug-in. Si vous n'aimez pas cela, vous pouvez toujours supprimer le (s) plugin (s) incriminé (s) (je suppose qu'il est probablement flash).

Daisetsu
la source
3
Flash le fait aussi, mais le Javascript simple peut voler des raccourcis. Commencez une nouvelle question ici et appuyez sur Cmd-L (Ctrl-L sur les non-Mac) dans la fenêtre de texte de la question. Au lieu d'aller à la barre d'URL comme il se doit, le raccourci sera volé et vous verrez une boîte de dialogue Insérer un lien hypertexte. C’était rare, mais trop de sites Web ont commencé à le faire récemment.
Taw
Je viens de l'essayer sur Windows 7 sous Firefox et j'ai sauté directement dans la barre d'adresse comme d'habitude.
Daisetsu
Désolé, je n'étais pas clair - cela ne se produit que lorsque la boîte de dialogue de texte enrichi est sélectionnée. As-tu fais ça? J'ai testé sur OSX avec Firefox, Opera, Safari et Chrome. Dans les quatre cas, normalement, Cmd-L saute à la barre d'URL (et Ctrl-L ne fait rien). Lors de la modification de la question, les corps de Cmd-L et Ctrl-L affichent à la place le dialogue Insérer un lien hypertexte.
taw
On dirait que tu as raison. Je ne sais pas comment empêcher cela. :( C'est une question intéressante maintenant, donc je vote votre question. Si personne n'y répond, je vais verser une prime à ce sujet.
Daisetsu
Le problème n'est pas avec les plugins. Les plugins sont un problème à part. Et un problème différent, après tout. Dans les plugins, tout le focus est volé par le plugin, car c'est une entité séparée. Avec JavaScript, l'interface utilisateur de Firefox est JavaScript et possède ses propres liaisons, mais les sites peuvent définir des liaisons au même niveau. Jusqu'à présent, il n'y a toujours pas de mécanisme pour empêcher cela.
mardi
0

Après de nombreux tests sur différents navigateurs, il est plus facile d'intercepter les touches lorsqu'elles sont enfoncées (non enfoncées) car certaines de ces "touches intégrées à l'application" sont difficiles à intercepter avec l'événement "touche".

Je suis arrivé avec ce script qui est en quelque sorte compatible avec tous les navigateurs (je n’ai pas testé pour IE de Microsoft). Notez que les navigateurs renvoient des codes différents pour certaines clés. Dans mon cas, je voulais empêcher Ctrl + P.

La clé "P" sur chrome est vue comme e.keyCode == 80sur l'opéra e.charCode == 16, alors que sur Firefox, elle este.charCode == 112

$(document).on('keydown', function(e) {
    if(e.ctrlKey && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
        alert("Please use the Print PDF button below for a better rendering on the document");
        e.cancelBubble = true;
        e.preventDefault();

        e.stopImmediatePropagation();
    }  
});

J'ai utilisé jQuery.

Peter
la source
0

Si vous souhaitez désactiver toute touche Ctrl prise en charge par la page Web, il vous suffit de filtrer tous les codes de la lettre de z (en vous basant sur la réponse précédemment acceptée et fonctionnelle).

// ==UserScript==
// @name           Disable Ctrl+key interceptions
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

(window.opera ? document.body : document).addEventListener('keydown', function(e) {
    //alert(e.keyCode ); //uncomment to find more keyCodes
    if( e.ctrlKey && e.keyCode>=65 && e.keyCode<=90 ) {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
}, !window.opera);
Steve Horvath
la source
-1

Peut-être que vous pouvez utiliser Autohotkey ou Autoit, un de ces programmes et si vous pouvez faire des combinaisons de raccourcis clavier et les lier aux fonctions firefox, par exemple

Ctrl-; T vers nouvel onglet

Ctrl-; N à nouvelle fenêtre, et ainsi de suite.

Je ne sais pas comment utiliser Autohotkey ou Autoit, si bien que quelqu'un d'autre devra vérifier que cela pourrait fonctionner, je ne propose cela que comme idée potentielle.

Nathaniel Saxe
la source
-2

La version actuelle de Firefox nous permet de "désactiver javascript pour pirater le menu contextuel":

Outils / Options / Contenu / Activer Javascript avancé / Désactiver ou remplacer les menus contextuels

Mais il n’existe aucune fonctionnalité permettant de "désactiver javascript pour pirater des raccourcis clavier".

ps. Je déteste le site Twitter, ses raccourcis clavier sont en conflit avec mes raccourcis clavier basés sur le système: J, K, L, I

J'ai fait une demande de fonctionnalité sur bugzilla.mozilla.org, veuillez commenter ici: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

diyisme
la source