So verbieten Sie das Stehlen von Tastaturkürzeln durch Websites in Firefox

57

Viele Websites, insbesondere alle mit Rich-Text-Bearbeitung befassten Websites (auch diese Website ist schuldig), stehlen Tastaturkürzel, die normalerweise zur Steuerung von Firefox verwendet werden, und lassen sie stattdessen etwas anderes tun. Es ist total ärgerlich, wenn ich so etwas wie Cmd-Nummer, Cmd-L, Cmd-T oder Cmd-K drücke und es nicht tut, was ich will. Kann ich damit aufhören?

Eigentlich wäre es wahrscheinlich das Beste, wenn ich das Stehlen aller Cmd- * -Verknüpfungen verbieten könnte. Ich habe sie noch nie für irgendetwas Nützliches gesehen. Ist es möglich?

taw
quelle
4
Einverstanden, es ist ärgerlich. FogBugz hat eine sehr gute Implementierung von Tastaturkürzeln. CTRL-;Ruft den Verknüpfungsmodus auf und hebt alle auf dem Bildschirm angezeigten Befehle mit den verfügbaren Verknüpfungen hervor. Jede Verknüpfung ist eine Combo, also ist neuer Fall CTRL-; Nund Bearbeiten ist CTRL-; E. Sehr gewöhnungsbedürftig und ohne Konflikte. Ich wünschte, mehr Websites würden so etwas verwenden, da dies für den Benutzer einfacher ist und keine Browser-Verknüpfungen überschreibt. Schade, dass SuperUser dies nicht tut, da es von denselben Leuten wie FogBugz stammt.
Sam
Siehe auch superuser.com/questions/399352/…
Mechanische Schnecke
1
Dies wird bei dieser Funktionsanforderung in Bugzilla besprochen .
Mechanische Schnecke
Ich besuche viele Intranetseiten bei der Arbeit, die cmd + N irgendwie durcheinander bringen, so dass ich niemals neue Browserfenster über die Tastatur öffnen kann! So nervig!
Nicolas Miari
1
Nach ~ 12 Jahren hat Mozilla eine ziemlich vernünftige Lösung dafür gefunden. Es ist gut versteckt und unvollkommen, aber es könnte deine geistige Gesundheit retten. Bitte sehen Sie meine Antwort hier: superuser.com/a/1317514/158390
Lambart

Antworten:

24

Dank der neuen @run-atEigenschaft von Greasemonkey ist dies jetzt möglich!

Ich habe mich von diesem Skript und diesem Skript inspirieren lassen , um sie zu einem Userscript zu kombinieren, das erfolgreich die Tastenkombinationen Ctrl+ Tund Ctrl+ abfängt S. Ich habe in Firefox 17 ESR und Firefox 25 getestet.

// ==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
quelle
1
Das war sehr hilfreich. OS X - Benutzer sollten die Swap e.ctrlKeyfür e.cmdKeyund die e.cmdKey && e.shiftKeymeisten ihrer Browser - Shortcuts zurückzufordern.
JamesGecko
Mit diesem Skript kann ich STRG + TAB korrigieren, indem ich 9das Array keycodes hinzufüge . Vielen Dank!
Mike Mueller
@JamesGecko Über diese Antwort herausgefunden, solltest / könntest du den e.metaKey für die Befehlstaste verwenden.
Riezebosch
3
Dieser Code funktioniert! Beachten Sie, dass nicht nur Strg + Taste, sondern auch Strg + Alt + Taste, Strg + Umschalt + Taste und Strg + Alt + Umschalt + Taste gefiltert werden, da nur der Status des Modifikators Strg überprüft wird.
RomanSt
Erste Frage: Warum überprüft ein Skript, das angeblich unter Firefox funktioniert, ob der Browser Opera ist? Und die zweite Frage: Der Kommentar sagt Zeichencodes für 's' und 't', aber die Codes sind wirklich für 'S' und 'T'. Muss ich den Großbuchstaben aus irgendeinem Grund angeben? Vielen Dank.
Douglas Held
8

11 Jahre nach dem Einreichen des Fehlers hat Mozilla endlich begonnen, an dieser beliebten Feature-Anfrage zu arbeiten, und sie scheint nun in Ordnung zu sein (getestet in Firefox 66.0.3 / Ubuntu).

(Danke an @PerJohansson für den Hinweis, dass die Einstellung seit FF 59 sehr viel schwieriger zu finden ist.)

Sie können Standortverknüpfungen deaktivieren, indem Sie die folgenden Schritte ausführen:

  1. Klicken Sie auf das (i)Symbol in der Adressleiste
  2. Klicken Sie auf den kleinen Pfeil ( >) rechts neben dem Statuselement "Verbindung".
  3. Nun solltest du More Informationunten sehen. Klicken Sie darauf, und Sie gelangen schließlich zum Page InfoDialogfeld.
  4. Wechseln Sie schließlich zur PermissionsRegisterkarte, und passen Sie die Override Keyboard ShortcutsEinstellung an.

Hier einige aktuelle Screenshots (Mai 2019) für jeden Schritt:

Firefox Site Info-Dialogfeld Screenshot

Firefox Site Security-Dialogfeld Screenshot

Screenshot der Registerkarte "Firefox-Berechtigungen"

Wenn Sie sich für den Verlauf dieses Fixes interessieren, finden Sie hier die zugehörigen Mozilla-Tickets: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 und https://bugzilla.mozilla.org/show_bug.cgi id = 1445942

Lambart
quelle
2
In Firefox 64 (nicht sicher, wo es auftauchte) müssen Sie auf "Verbindung" => "Weitere Informationen" klicken, um auf dieses Idalog-Feld zuzugreifen. Das Berechtigungszahnrad wechselt stattdessen in die Einstellungen, was nicht der richtige Ort ist.
Per Johansson
Danke @PerJohansson, ich habe das Ticket aktualisiert.
Lambart
Was ist die about:configOption, um die Standardeinstellung zu ändern? Ich möchte alle Sites dazu zwingen , sich nicht in meine Tastatur
einzuklinken
5

Umfangreiche Untersuchungen haben ergeben, dass dies ab der aktuellen Version von Firefox (3.6.x) nicht mehr möglich ist - alle Konflikte bei der Schlüsselbindung werden mit Prioritäten gelöst: System> Website> Firefox - eine ziemlich blöde Reihenfolge. Keines der Addons, die ich ausprobiert habe, scheint das Problem beheben zu können.

Möglicherweise wird es in zukünftigen Versionen machbar, aber im Moment lautet die Antwort - Unmöglich.

taw
quelle
1
Fast 4 Jahre später FF 30.0 verwenden, und das ist immer noch ein Problem. Ich werde Martins Greasemonkey-Idee ausprobieren.
LGT
2
Fast 8 Jahre später FF 53.0 verwenden, und dies ist immer noch ein Problem.
Daniel
5

Da es sich anscheinend um JavaScript-Tastaturereignisse handelt, bei denen Tastendrücke gestohlen werden, ist es dann nicht möglich, ein JavaScript-Skript (das über Greasemonkey verwendet werden kann) zu erstellen , mit dem die Bindung aller Tastaturereignisse aufgehoben und die ordnungsgemäße Verwendung der einzelnen Verknüpfungen an den Browser zurückgegeben wird.

Ich bin nicht sicher, wie realisierbar dies ist, aber jemand mit mehr Erfahrung mit JavaScript / Greasemonkey kann möglicherweise helfen (es könnte sich lohnen, nach SO zu fragen).

DMA57361
quelle
2
Dies funktioniert über den onKeyPress-Mechanismus - Firefox sendet jeden Tastendruck zuerst an die Website und überprüft ihn anschließend nur, wenn er nicht abgebrochen oder abgefangen wurde. Ein wenig Greasemonkey-Magie, die das Abfangen von Tastendrücken vor der Website und das Ausführen von Firefox-Funktionen auf irgendeine Weise direkt ermöglicht, ist jedoch alles andere als selbstverständlich.
Taw
4

Das Problem ist, dass auf jeder Seite JavaScript ausgeführt werden kann, mit dem ein Ereignishandler zum Abrufen von Tastendruckereignissen eingerichtet wird. Die JavaScript-Steuerelemente von Firefox sind nicht fein genug, um dies zu stoppen, ohne andere JavaScript-Funktionen zu beeinträchtigen.

Die einzige Möglichkeit, dies zu verhindern, besteht darin, Javascript zu deaktivieren (Extras -> Optionen, Registerkarte [Inhalt], deaktivieren Sie das Kontrollkästchen JavaScript aktivieren ). Oder Sie können Javascript mit einer Erweiterung wie NoScript für jede Site einzeln deaktivieren.

Mit Firefox können Sie bestimmte Verwendungszwecke von Javascript verhindern, z. B. das Verschieben / Ändern der Fenstergröße, das Ändern oder Deaktivieren des Kontextmenüs usw .; Aber nichts hindert Websites daran, Tastaturereignisse abzufangen.

Vielleicht gibt es eine Erweiterung, die dieses Maß an Kontrolle bietet - mir ist keine bekannt.
Es gibt Javascript-Optionen , aber diese Erweiterung wird nicht mehr aktualisiert.

njd
quelle
2
Javascript-Optionen und einige andere Erweiterungen, die ich ausprobiert habe, unterstützen dies nicht. Das Blockieren von Javascript würde das Web so gut wie unbrauchbar machen. Dies ist eigentlich keine Option.
Taw
0

Es ist wahrscheinlich, dass Plug-ins von Drittanbietern den Fokus vom Hauptbrowserfenster erhalten. In diesem Fall wird die Tastatureingabe (außer Interrupts) vom Plugin abgefangen. Wenn dir das nicht gefällt, kannst du das / die problematische (n) Plugin (s) immer entfernen [ich würde annehmen, dass es wahrscheinlich ein Flash ist].

Daisetsu
quelle
3
Flash macht es auch, aber einfaches Javascript kann Verknüpfungen stehlen. Starten Sie hier eine neue Frage und drücken Sie im Fragentextfenster die Tastenkombination "Cmd-L" (Strg-L bei Nicht-Mac-Computern). Anstatt wie vorgesehen zur URL-Leiste zu wechseln, wird die Verknüpfung gestohlen und es wird ein Dialogfeld zum Einfügen von Hyperlinks angezeigt. Früher war das selten, aber in letzter Zeit haben zu viele Websites damit begonnen.
Taw
Ich habe es gerade unter Windows 7 mit Firefox versucht und bin direkt in die Adressleiste gesprungen, wie es normalerweise der Fall ist.
Daisetsu
Entschuldigung, ich war mir nicht sicher - dies geschieht nur, wenn das Dialogfeld "Rich Textbox" ausgewählt ist. Hast du das gemacht? Ich habe unter OSX mit Firefox, Opera, Safari und Chrome getestet. In allen vier Fällen springt Cmd-L normalerweise zur URL-Leiste (und Strg-L macht nichts). Wenn Sie den Fragekörper bearbeiten, zeigen sowohl Cmd-L als auch Strg-L stattdessen das Dialogfeld Hyperlink einfügen an.
Taw
Sieht so aus, als hättest du recht. Ich habe keine Ahnung, wie ich das verhindern soll. :( Es ist jetzt eine interessante Frage, also stimme ich Ihrer Frage zu. Wenn niemand darauf antwortet, werfe ich ein Kopfgeld darauf.
Daisetsu
Das Problem liegt nicht bei Plugins. Plugins sind ein eigenständiges Problem. Und schließlich ein anderes Problem. In Plugins wird der gesamte Fokus vom Plugin gestohlen, da es sich um eine separate Entität handelt. Mit JavaScript ist die Firefox-Benutzeroberfläche JavaScript und verfügt über eigene Bindungen. Websites können jedoch Bindungen definieren, die auf derselben Ebene liegen. Bisher gibt es noch keinen Mechanismus, um dies zu verhindern.
NJSG
0

Nach vielen Tests in verschiedenen Browsern ist es einfacher, die Tasten abzufangen, wenn sie gedrückt sind (nicht gedrückt), da es schwierig ist, einige dieser "in die App integrierten Tasten" mit dem Ereignis "Tastendruck" abzufangen.

Ich habe mir dieses Skript ausgedacht, das sozusagen browserübergreifend ist (ich habe es nicht auf den IE von Microsoft getestet). Beachten Sie, dass die Browser für einige Schlüssel unterschiedliche Codes zurückgeben. In meinem Fall wollte ich Strg + P verhindern.

Die Taste "P" auf Chrom wird wie e.keyCode == 80in der Oper gesehen e.charCode == 16, während es bei Firefox so iste.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();
    }  
});

Ich habe jQuery verwendet.

Peter
quelle
0

Wenn Sie eine Strg-Taste deaktivieren möchten, die von der Webseite übernommen wird, filtern Sie einfach nach allen Buchstabencodes von az (aufbauend auf der zuvor akzeptierten und funktionierenden Antwort).

// ==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
quelle
-1

Vielleicht können Sie Autohotkey oder Autoit verwenden, eines dieser Programme, und wenn Sie Hotkey-Combos ausführen und sie mit den Firefox-Funktionen verknüpfen können, sagen wir

Ctrl-; T zum neuen Reiter

Ctrl-; N in ein neues Fenster und so weiter.

Ich weiß nicht, wie man Autohotkey oder Autoit verwendet, daher muss jemand anderes prüfen, ob dies funktioniert. Ich biete dies nur als mögliche Idee an.

Nathaniel Saxe
quelle
-2

Die aktuelle Version von Firefox ermöglicht es uns, "Javascript zu deaktivieren, um das Kontextmenü zu hijacken":

Extras / Optionen / Inhalt / Javascript aktivieren Erweitert / Kontextmenüs deaktivieren oder ersetzen

Es gibt jedoch keine Funktion zum Deaktivieren von Javascript, um Tastaturkürzel zu hijacken.

ps. Ich hasse die Twitter-Website, deren Tastaturkürzel im Widerspruch zu meinen systembasierten Tastaturkürzeln stehen: J, K, L, I

Ich habe auf bugzilla.mozilla.org eine Funktionsanfrage gestellt. Bitte kommentieren Sie diese hier: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

Diyismus
quelle