Come posso impedire alle pagine che visito di ignorare i tasti di scelta rapida di Firefox selezionati?


40

In Firefox, come posso impedire alle pagine di ignorare le scorciatoie da tastiera integrate di Firefox tramite Javascript in base al tasto? Preferibilmente anche per sito? L'override più frustrante è la barra ('/') collegata a "Trova nella pagina". Siti come i risultati di ricerca di Google, le tempistiche di Twitter, alcuni wiki e altre pagine rubano il tasto barra per le proprie caselle di ricerca, il che è completamente sbagliato.

Poiché il mio rappresentante mi consente di porre, modificare e rispondere alle domande, ma non di aggiungere commenti, questo è fondamentalmente un duplicato di queste altre due domande a cui non è stata data una risposta adeguata:

Come fermare un sito Web per ignorare le mie scorciatoie da tastiera

Firefox: non consentire ai siti Web di sovrascrivere il tasto / (barra)


1
Sono frustrato dal fatto che PHPMyAdmin ignori ctrl- <freccia sinistra> ... è una buona domanda
Altamente irregolare,

1
Non sopporto i siti Web che prevalgono sul comportamento predefinito. Molto anche con clic intermedi. Vedi questa domanda correlata per una soluzione a quel problema.
Cam Jackson,

Risposte:


12

Basandomi sulla risposta di edymtt, ho creato uno script utente che disabilita solo scorciatoie da tastiera specifiche. È possibile aggiungere più scorciatoie da disabilitare aggiungendo codici chiave all'array di codici chiave o limitare a quali siti applicarlo sostituendo il @includetag con uno o più motivi.

Installa usando greasemonkey .

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

keycodes = [191] // Keycode for '/', add more keycodes to disable other key captures

document.addEventListener('keydown', function(e) {
//    alert(e.keyCode); //uncomment to find out the keycode for any given key
    if (keycodes.indexOf(e.keyCode) != -1)
    {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
});

2
Eccezionale! Soluzione quasi completa anche per le meta-chiavi --- Stavo cercando di impedire a Google Documenti di intercettare la scheda precedente (Cmd + sinistra) e la scheda successiva (Cmd + destra) e ho scoperto che dovevo anche impostare useCapture su true; vale a dire, document.addEventListener ('keydown', yourHandlerFn, true)
chbrown

1
nota che il valore 191dipende dal layout della tastiera, per quanto riguarda la mia configurazione azerty (ho 16 + 58 per l'area alfa e 111 per il tastierino numerico)
sylvainulg

2
e sfortunatamente non funziona più al giorno d'oggi (testato su phabricator e twitter). listener personalizzato viene attivato, ma l'evento del sito viene attivato comunque e "Cerca nella pagina" non viene visualizzato.
sylvainulg,

1
@sylvainulg Vedo che non funziona su Twitter, ma almeno funziona ancora su GitHub. Mi chiedo cosa sia cambiato.
binki,

Funziona ovunque l'ho provato tranne php.net. Mi chiedo quale evento stiano usando.
qwazix,

8

Per quanto riguarda Google e il collegamento di Ricerca rapida, è possibile installare questo script Greasemonkey:

http://userscripts-mirror.org/scripts/show/132237

Come dice la descrizione, "impedisce a Google di focalizzare l'input di ricerca su ogni pressione di un tasto" - in particolare, se si preme /con il focus della tastiera all'esterno della casella di ricerca, verrà visualizzata la Ricerca rapida, così come su altri siti Web.

L'ho installato solo senza toccare il codice, ma penso che possa essere facilmente adattato per funzionare con altri siti e / o altre scorciatoie.


Per chiarire: questo script utente interrompe TUTTE le scorciatoie da tastiera sulle pagine per le quali è abilitato, preservando le funzionalità del browser. Per applicarlo ad altri siti Web basta aggiungere altri tag @include.
MikeFHay

senza alcuna informazione su ciò che si nasconde dietro il collegamento, la risposta è purtroppo inutile quando gli utenti script-mirror.org si blocca, bloccato da un firewall o altro.
sylvainulg,

8

Da Firefox 58 è possibile disabilitare l'override delle scorciatoie da tastiera per sito Web.

"Sostituisci scorciatoie da tastiera" e molte altre autorizzazioni sono disponibili in "Informazioni sulla pagina -> Autorizzazioni" (sotto l'icona delle informazioni nella barra degli URL).

Esempio di autorizzazioni di Firefox per superuser.com

La sostituzione della tastiera è stata introdotta in Firefox # 380637


1
Sì, dopo 11 anni hanno finalmente fatto un lavoro a metà per sistemare quel biglietto. Purtroppo l'attuale implementazione (sempre in FF 59) disabilita completamente i tasti Backspacee Delete, il che fa davvero schifo.
Lambart,

6
Inoltre, purtroppo non impedisce le pagine web da catturare non spostato (cioè, senza Ctrl, Shifto Altchiave) di ingresso - che significa che questo non aiuta affatto con la chiave barra menzionata nella domanda iniziale.
Lambart,

@Lambart - buono a sapersi, ho finito per non usarlo anch'io, dato che le scorciatoie da tastiera di Firefox sono state riparate in jira e confluenza (da qualche parte intorno a Firefox 59)
Alec Istomin

2
cosa è stato risolto? JIRA e Confluence continuano entrambi a prendere tutti i tipi di chiavi che interrompono costantemente il mio flusso di lavoro. Vedo questo come un problema di Atlassian: devono consentire alle persone di disabilitare (e / o modificare) le loro "scorciatoie".
Lambart,

firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592 prodotti atlassian fissi per me (potrebbero esserci state correzioni atlassiane nello stesso lasso di tempo)
Alec Istomin

0

Ecco uno script più generale: puoi definire un numero qualsiasi di eventi keypress da disabilitare.

https://greasyfork.org/en/scripts/5819-disable-website-keyboard-hooks

// ==UserScript==
// @name           Disable website keyboard hooks
// @description    Stop websites from hijacking keyboard shortcuts.
// @author         Isaac Levy
// @run-at         document-start
// @include        *
// @grant          none
// @version        0.0.1
// @namespace      https://isaacrlevy.com
// ==/UserScript==

var keycodes = [ // Add keycodes as desired, keep sorted.
    37, 38, 39, 40 // Arrow keys.
]

var meta_keycodes = [ // Disable these when meta key is pressed.
    70
];

// Don't change below this line.

var isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0;

// Create a fast lookup.
// This saves work during normal typing. Maybe unnecessary.
var keycode_offset = keycodes[0];
var keycode_arr = Array(keycodes[keycodes.length - 1] - keycode_offset)
for (var i = 0, len = keycodes.length; i < len; i++) {
    keycode_arr[keycodes[i] - keycode_offset] = true;
}

document.addEventListener('keydown', function(e) {
    //console.log(e);
    if ((isMac && e.metaKey) || (!isMac && e.ctrlKey)) {
        if (meta_keycodes.indexOf(e.keyCode) >= 0) {
            e.stopImmediatePropagation();
        }
    } else if (keycode_arr[e.keyCode - keycode_offset]) {
        e.stopImmediatePropagation();
    }
    return false;
});

Mi dispiace, ma non riesco a farlo funzionare. Soprattutto voglio disabilitare i tasti freccia sinistra e destra su un sito - ma con questo script i tasti freccia controllano ancora il sito ???
Christian Herenz,

-3

Il componente aggiuntivo YesScript è stata la soluzione senza problemi per me. Impedisce ai siti di eseguire JavaScript ma solo i siti scelti. Il più delle volte questi siti dirottano la scorciatoia da tastiera tramite JavaScript. L'ho trovato su questo articolo dal modulo Ghacks.net.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.