Come vietare la scorciatoia da tastiera rubata dai siti Web in Firefox


57

Molti siti Web, in particolare tutto ciò che riguarda l'editing di testi complessi (anche questo sito è colpevole), rubano le scorciatoie da tastiera normalmente utilizzate per controllare Firefox e farli invece fare qualcos'altro. È totalmente esasperante quando premo qualcosa come Cmd-number, Cmd-L, Cmd-T o Cmd-K e non fa quello che voglio. Posso farlo smettere?

In realtà, probabilmente sarebbe meglio se potessi vietare il furto di tutte le scorciatoie Cmd- *. Non li ho mai visti usati per qualcosa di utile. È possibile?


4
D'accordo, è esasperante. FogBugz ha un'ottima implementazione delle scorciatoie da tastiera. CTRL-;entra in modalità scorciatoia ed evidenzia tutti i comandi visibili sullo schermo con le scorciatoie disponibili. Ogni scorciatoia è una combo, quindi lo è il nuovo caso CTRL-; Ne la modifica lo è CTRL-; E. Molto facile abituarsi e zero conflitti. Vorrei che più siti usassero qualcosa del genere perché è più facile per l'utente e non sovrascrive le scorciatoie del browser. Peccato che SuperUser non lo faccia poiché proviene dalle stesse persone di FogBugz.
Sam,



Visito molte pagine intranet al lavoro che in qualche modo confondono cmd + N, quindi non posso mai aprire nuove finestre del browser dalla tastiera! Così fastidioso!
Nicolas Miari,

1
Dopo ~ 12 anni, Mozilla ha stabilizzato una soluzione abbastanza ragionevole per questo. È ben nascosto e imperfetto, ma potrebbe salvare la tua sanità mentale. Si prega di vedere la mia risposta qui: superuser.com/a/1317514/158390
Lambart

Risposte:


24

Grazie alla nuova @run-atproprietà di Greasemonkey , questo è ora possibile!

Ho preso ispirazione da questo script e questo script per combinare in un userscript che intercetta con successo le scorciatoie da tastiera Ctrl+ Te Ctrl+ S. Ho testato in Firefox 17 ESR e 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);

1
Questo è stato molto utile. Utenti di OS X dovrebbero scambiare e.ctrlKeyper e.cmdKeye e.cmdKey && e.shiftKeydi recuperare la maggior parte delle loro scelte rapide del browser.
JamesGecko,

Questo script funziona per me per correggere CTRL + TAB aggiungendo 9alla matrice di codici chiave. Grazie!
Mike Mueller,

@JamesGecko Scoprendo tramite questa risposta dovresti / potresti usare e.metaKey come chiave di comando.
riezebosch

3
Questo codice funziona! Tieni presente che filtra non solo Ctrl + Tasto, ma anche Ctrl + Alt + Tasto, Ctrl + Maiusc + Tasto e Ctrl + Alt + Maiusc + Tasto, poiché controlla solo lo stato del modificatore Ctrl.
RomanSt

Prima domanda: per uno script che funziona su Firefox, perché controlla se il browser è Opera? E seconda domanda: il commento dice i codici carattere per 's' e 't', ma i codici sono realmente per 'S' e 'T'. Devo specificare il codice maiuscolo per qualche motivo? Grazie.
Douglas Held,

8

11 anni dopo che il bug era stato archiviato, Mozilla finalmente riusciva a lavorare su questa popolare richiesta di funzionalità e ora sembra funzionare correttamente (testato in Firefox 66.0.3 / Ubuntu).

(Grazie a @PerJohansson per aver sottolineato che hanno reso l'impostazione molto più difficile da trovare da FF 59.)

È possibile disabilitare le scorciatoie del sito seguendo questi passaggi:

  1. Fai clic (i)sull'icona nella barra degli indirizzi
  2. Fare clic sulla piccola freccia ( >) a destra della voce di stato "Connessione".
  3. Ora dovresti vedere More Informationin fondo. Fai clic su quello e finalmente arriverai alla Page Infofinestra di dialogo.
  4. Infine, vai alla Permissionsscheda e regola l' Override Keyboard Shortcutsimpostazione.

Ecco alcune schermate recenti (maggio 2019) per ogni passaggio:

Schermata della finestra di dialogo Informazioni sito Firefox

Schermata della finestra di dialogo Sicurezza sito Firefox

Schermata della scheda Autorizzazioni di Firefox

Se sei interessato alla storia di questa correzione, ecco i biglietti Mozilla correlati: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 e https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942


2
In Firefox 64 (incerto su dove sia apparso), devi fare clic su "Connessione" => "Ulteriori informazioni" per accedere a questa finestra di identificazione. La ruota dentata delle autorizzazioni va invece nelle Preferenze che non è il posto giusto.
Per Johansson il

Grazie @PerJohansson, ho aggiornato il biglietto.
Lambart

Qual è l' about:configopzione per modificare l'impostazione predefinita? Voglio forzare tutti i siti a non essere in grado di collegarmi alla mia tastiera
inetknght

5

Ricerche approfondite mostrano che dalla versione attuale di Firefox (3.6.x) questo è impossibile - tutti i conflitti di associazione chiave sono risolti con priorità: Sistema> Sito Web> Firefox - un ordine piuttosto stupido. Nessuno dei componenti aggiuntivi che ho provato sembra essere in grado di risolverlo.

Forse potrebbe diventare fattibile nelle versioni future, ma in questo momento la risposta è: impossibile.


1
L'uso di FF 30.0 quasi 4 anni dopo e questo è ancora un problema. Proverò l'idea di Greasemonkey di Martin.
LGT,

2
L'uso di FF 53.0 quasi 8 anni dopo e questo è ancora un problema.
Daniel,

5

Dal momento che i problemi sembrano essere gli eventi della tastiera JavaScript che rubano i tasti premuti, non sarebbe possibile costruire uno script JavaScript (da usare tramite Greasemonkey) che separa tutti questi eventi della tastiera, restituendo così l'uso corretto di ogni scorciatoia al browser?

Non sono sicuro di quanto sia fattibile, ma qualcuno con più esperienza JavaScript / Greasemonkey potrebbe essere in grado di aiutare (potrebbe valere la pena chiedere su SO).


2
Funziona tramite il meccanismo di onKeyPress: Firefox invia prima ogni tasto al sito Web e lo controlla solo se non è stato cancellato o intercettato. Qualche magia di Greasemonkey che intercetterebbe i tasti premuti prima del sito Web e che in qualche modo esegua direttamente le funzioni di Firefox potrebbe essere possibile, ma è tutt'altro che ovvio.
Taw

4

Il problema è che qualsiasi pagina può eseguire Javascript che imposta un gestore eventi per catturare eventi keypress, ei controlli javascript di Firefox non sono sufficientemente dettagliati per fermarlo senza interrompere altre funzionalità javascript.

L'unico modo per impedirlo è disabilitare Javascript (Strumenti -> Opzioni, scheda [Contenuto], deselezionare Abilita JavaScript ). Oppure puoi disabilitare Javascript su una base per sito con un'estensione come NoScript.

Firefox ti consente di impedire determinati usi di Javascript, come spostare / ridimensionare le finestre, modificare o disabilitare il menu di scelta rapida, ecc .; ma non c'è nulla che impedisca ai siti web di intercettare gli eventi della tastiera.

Forse c'è un'estensione che offre questo livello di controllo - non ne sono consapevole.
Ci sono opzioni Javascript , ma l'estensione non viene più aggiornata.


2
Le opzioni Javascript e alcune altre estensioni che ho provato non supportano questo. Bloccare tutto javascript renderebbe il web praticamente inutilizzabile, questa non è davvero un'opzione.
Taw

0

È probabile che i plugin di terze parti stiano attirando l'attenzione dalla finestra principale del browser. In tal caso, l'input da tastiera (tranne gli interrupt) verrà intercettato dal plug-in. Se non ti piace, puoi sempre rimuovere i plug-in offensivi [presumo che sia probabilmente flash].


3
Anche Flash lo fa, ma Javascript semplice può rubare scorciatoie. Inizia qui una nuova domanda e premi Cmd-L (Ctrl-L su non Mac) nella finestra di testo della domanda. Invece di andare alla barra dell'url come dovrebbe, il collegamento verrà rubato e vedrai alcune finestre di dialogo Inserisci collegamento ipertestuale. In passato era raro, ma troppi siti Web hanno iniziato a farlo di recente.
Taw

L'ho appena provato su Windows 7 con Firefox e sono passato direttamente alla barra degli indirizzi come al solito.
Daisetsu,

Spiacenti, non ero chiaro: questo accade solo quando è selezionata la finestra di dialogo Rich textbox. Sei stato tu? Ho provato su OSX con Firefox, Opera, Safari e Chrome. In tutti e quattro normalmente Cmd-L passa alla barra dell'URL (e Ctrl-L non fa nulla). Quando si modifica il corpo della domanda, sia Cmd-L che Ctrl-L mostrano invece la finestra di dialogo Inserisci collegamento ipertestuale.
Taw

Sembra che tu abbia ragione. Non ho idea di come evitarlo. :( È una domanda interessante ora, quindi sto votando la tua domanda. Se nessuno risponde, ci metto una taglia.
Daisetsu,

Il problema non è con i plugin. I plugin sono un problema separato da soli. E un problema diverso, dopo tutto. Nei plugin, tutto il focus viene rubato dal plugin, perché è un'entità separata. Con JavaScript, l'interfaccia utente di Firefox è JavaScript e ha i propri collegamenti, ma i siti possono definire collegamenti allo stesso livello. Finora, non esiste ancora alcun meccanismo per impedirlo.
njsg,

0

Dopo molti test su vari browser, è più facile intercettare i tasti quando sono inattivi (non premuti) perché alcuni di questi "tasti integrati app" sono difficili da intercettare con l'evento "keypress".

Ho pensato a questo script compatibile con i browser diversi (non ho testato per Microsoft IE). Si noti che i browser restituiscono codici diversi per alcuni tasti. Nel mio caso volevo impedire Ctrl + P.

Il tasto "P" su Chrome è visto come e.keyCode == 80, su Opera, lo è e.charCode == 16, mentre su Firefox lo èe.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();
    }  
});

Ho usato jQuery.


0

Se si desidera disabilitare qualsiasi tasto ctrl acquisito dalla pagina Web, è sufficiente filtrare tutti i codici della lettera da az (basandosi sulla risposta precedentemente accettata e funzionante)

// ==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);

-1

Forse puoi usare Autohotkey o Autoit, uno di quei programmi e se puoi fare combinazioni di tasti di scelta rapida e collegarli alle funzioni di Firefox, ad esempio

Ctrl-; T alla nuova scheda

Ctrl-; N in una nuova finestra e così via.

Non so come usare Autohotkey o Autoit, quindi qualcun altro dovrà verificare che questo possa funzionare, lo offro solo come una potenziale idea.


-2

La versione corrente di Firefox ci consente di "disabilitare javascript per dirottare il menu contestuale":

Strumenti / Opzioni / Contenuto / Abilita Javascript avanzato / Disabilita o sostituisci i menu di scelta rapida

Ma non esiste alcuna funzione per "disabilitare javascript per dirottare le scorciatoie da tastiera".

ps. Odio il sito Web di Twitter, le sue scorciatoie da tastiera sono in conflitto con le mie scorciatoie da tastiera basate sul sistema: J, K, L, I

Ho fatto richiesta di funzionalità su bugzilla.mozilla.org, per favore commenta qui: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

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.