Die Löschtaste (Entf-Taste) funktioniert in Firefox nicht, wenn das Überschreiben von Tastaturkürzeln durch Websites blockiert wird (d. h. permissions.default.shortcuts = 2).

Die Löschtaste (Entf-Taste) funktioniert in Firefox nicht, wenn das Überschreiben von Tastaturkürzeln durch Websites blockiert wird (d. h. permissions.default.shortcuts = 2).

Der Standardwert für permissions.default.shortcutsist 0, wodurch Webseiten die normale Reaktion von Firefox auf Tastaturkürzel überschreiben können. Beispielsweise wird die Seite normalerweise mit Strg+R neu geladen, aber wenn permissions.default.shortcuts = 0, interpretiert Outlook Web Access Strg+R stattdessen als „Auf diese Nachricht antworten“.

Wenn diese Standardeinstellung unverändert bleibt, funktionieren die Schaltflächen Backspaceund Deletewie erwartet, sowohl in der URL- und Suchleiste als auch in Texteingabefeldern auf Webseiten: Backspacelöscht das Zeichen links vom Textcursor und Deletelöscht das Zeichen rechts vom Textcursor.

Die Einstellung permissions.default.shortcuts = 2verhindert, dass Websites Tastaturkürzel überschreiben, sodass beispielsweise Strg-R immer die aktuelle Seite neu lädt, unabhängig davon, um welche Seite es sich handelt. (Dies kann auch für einzelne Websites erfolgen.) Es hat jedoch auch einen seltsamen Nebeneffekt: Die DeleteSchaltfläche funktioniert weiterhin, wenn sie in den URL- und Suchleisten verwendet wird, aber sie tut nichts, wenn sie in einem Texteingabefeld verwendet wird. Es kommt weder zu Abstürzen noch zu abweichendem Verhalten; der Text bleibt einfach unverändert.

In Firefox 66.0.3 und höher Backspacefunktioniert es weiterhin normal. In Firefox 66.0.1 und früher ist es dagegen Backspacenoch schlimmer kaputt als Deletees ist (Details am Ende).

Hinweis: Die akzeptierte Antwort enthält jetzt eine (Teil-)Lösung und der Rest dieser Frage besteht größtenteils aus Informationen, die ich bereitgestellt habe, um jemand anderem zu helfen, herauszufinden, was falsch war und wie es behoben werden kann.Wenn Sie diese Frage also lesen, weil Sie selbst dieses Problem haben und eine Lösung benötigen, können Sie wahrscheinlich von hier aus direkt zur akzeptierten Antwort springen., und lesen Sie den Rest der Frage nur, wenn Ihr Problem dadurch nicht gelöst wird oder Sie neugierig sind.

Möglicherweise damit verbunden: Mozillas Liste der Tastaturkürzel (https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly) enthält im Abschnitt „Bearbeiten“ den Eintrag:

Command     Shortcut
Delete      Del

Ich habe keine Ahnung, wie das als "Abkürzung" im Gegensatz zur normalen Texteingabe angesehen werden kann (insbesondere Backspaceistnichtals "Abkürzung" im Bearbeitungsbereich aufgeführt), noch warum das Verbot, es zu "überschreiben", dazu führen sollte, dass überhaupt nichts passiert, anstattetwaswird gelöscht. Aber die Auflistung von Del/ Deleteals Tastenkombination scheint eine mögliche Verbindung zwischen Ursache (Websites können Tastenkombinationen nicht überschreiben) und Wirkung ( Deletefunktioniert nicht in Texteingabefeldern auf Websites) zu sein.

Ich habe außerdem festgestellt, dass es nicht notwendig ist, dass eine Site tatsächlich versucht, irgendetwas (überhaupt) zu überschreiben, um diesen Fehler zu beobachten. Das folgende HTML ist ausreichend (sowohl damit es Deletewie erwartet funktioniert, wenn permissions.default.shortcuts = 0, als auch damit es nichts tut, wenn permissions.default.shortcuts = 2):

<!DOCTYPE html>
<html>
<body>

Text box: <input type="text">

</body>
</html>

Dieses Verhalten tritt auch auf zahlreichen tatsächlichen Websites auf (ich habe Stack Exchange, Google und die E-Mail-Seite der Outlook Web App meiner Universität bestätigt) und ich habe keine Websites gefunden, auf denen es nicht auftritt. Es tritt unabhängig davon auf, ob ich die Löschtaste auf der integrierten Tastatur meines Laptops oder meiner USB-Tastatur verwende.

Abschließend konnte ich beim Javascript Key Event Tester folgende Ergebnisse beobachten (https://unixpapa.com/js/testkey.html) (nichts unterdrückt, alle Attributwerte angezeigt, Texteingabefeld vor der Eingabe fokussiert): Backspaceergibt:

keydown  keyCode=8         which=8         charCode=0        
         shiftKey=false ctrlKey=false altKey=false metaKey=false
         key=Backspace char=undefined location=0 repeat=false
         keyIdentifier=undefined keyLocation=undefinedkeyup    keyCode=8         which=8         charCode=0        
         shiftKey=false ctrlKey=false altKey=false metaKey=false
         key=Backspace char=undefined location=0 repeat=false
         keyIdentifier=undefined keyLocation=undefined

unabhängig vom Wert von permissions.default.shortcuts(oder browser.backspace_action, für diejenigen, die das Kleingedruckte unten lesen). Das Aufteilen der verbundenen Zeile (vermutlich aufgrund der Rücktaste, die auf einen Wagenrücklauf angewendet wird) und das Weglassen der Attribute, die sich bei all diesen Tests als gleich herausstellen, ergibt:

keydown  keyCode=8         which=8
         key=Backspace
keyup    keyCode=8         which=8
         key=Backspace

Im Gegensatz dazu Deleteergibt das Drücken

keydown  keyCode=46  (.)   which=46  (.)
         key=Delete
keyup    keyCode=46  (.)   which=46  (.)
         key=Delete

if permissions.default.shortcuts = 0(also when Deletefunktioniert wie erwartet), aber nur

keyup    keyCode=46  (.)   which=46  (.)
         key=Delete

if permissions.default.shortcuts = 2(d. h., when Deletetut nichts in Texteingabefeldern). Das heißt, die Taste „keyup“ ist vorhanden, aber die Taste „keydown“ fehlt. (Was bizarr ist.)

Meine zentrale Frage lautet also:Wie verhindere ich, dass Websites die aktuellen Firefox-Tastaturkürzel, die tatsächlich etwas bewirken, überschreiben, ohne dass es zu einem Ausfall kommt Delete?

Ein paar technische Details zu meinem System (ich kann mehr liefern, wenn das nützlich ist, obwohl die Tatsache, dass ich auf zwei anderen (Bibliotheks-)Computern ähnliche (oder schlechtere) Ergebnisse erzielt habe, darauf hindeutet, dass dies wahrscheinlich nicht system- oder hardwarespezifisch ist): Ich verwende Firefox 71.0 (64-Bit) unter Ubuntu (18.04.1) auf einem Dell Precision 5540-Laptop (i7-9750H). Meine externe Tastatur ist ein Microsoft Natural Ergonomic Keyboard 4000, für das ich weder spezielle Software installiert noch Tasten neu zugeordnet habe.

cat /etc/default/keyboardgibt

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"

Wie Backspaceist auch (und zusätzlich) in 66.0.1 und früher kaputt: Was passiert, wenn Sie drückenBackspace ohneDie Fokussierung eines Texteingabefelds wird gesteuert durch browser.backspace_action. 0(die Standardeinstellung unter Windows) bedeutet „Zur vorherigen Seite navigieren“, 1bedeutet „Nach oben scrollen“ und 2bedeutet „Nichts tun“.

In Firefox-Versionen vor 66.0.2 oder 66.0.3 (ich bin nicht sicher, welche) permissions.default.shortcuts = 2verhält sich die Einstellung jedoch Backspacegleich, unabhängig davon, ob ein Text-Eingabefeld fokussiert ist.

Wenn also browser.backspace_actionauf eingestellt ist 2, ist das Drücken Backspacevon genauso fehlerhaft wie Deletezuvor, aber nicht mehr. Wenn browser.backspace_actionauf eingestellt ist 1, ist es nur geringfügig schlimmer; die Seite springt unerwartet nach oben, aber sonst passiert nichts. Aber wenn es auf eingestellt ist 0(was wiederum die Windows-Standardeinstellung ist!), Backspacewird beim Drücken von , selbst wenn ein Texteingabefeld fokussiert ist, die Seite verlassen und zur vorherigen zurückkehren!

(Ich dachte zunächst, das BackspaceProblem sei Windows-spezifisch, da ich es auf (Universitätsbibliotheks-)Computern mit Windows und Firefox 66.0.1 bemerkt habe, aber nicht auf (Universitätsbibliotheks-)Computern mit MacOS und Firefox 66.0.3 (und auch nicht auf meinem eigenen Computer mit Linux und Firefox 77.0.1). Es stellte sich jedoch heraus, dass dieser Unterschied von zwei Nebenversionen zufällig den Zeitpunkt umfasst, an dem jemand bei Mozilla den Code gepatcht hat, um den Fehler zu beheben, der auf zutraf Backspace, jedoch versäumt hat, die entsprechenden Korrekturen vorzunehmen, die (in geringerem Maße) auf zutrafen Delete.)

Antwort1

Die unmittelbare Lösung besteht darin, Firefox nach dem Anwenden des Patches aus dem Quellcode zu erstellen (für die aktuelle stabile Version 71.0.1, obwohl dies für viele Versionen davor (mindestens bis 66.0.x und wahrscheinlich darüber hinaus) abgesehen von Unterschieden bei der Zeilennummerierung und den Hashes identisch sein sollte):

diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
index c90f3aa340..ffd8727350 100644
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -180,7 +180,7 @@
     <key id="key_paste"
          key="&pasteCmd.key;"
          modifiers="accel"/>
-    <key id="key_delete" keycode="VK_DELETE" command="cmd_delete"/>
+    <key id="key_delete" keycode="VK_DELETE" command="cmd_delete" reserved="false"/>
     <key id="key_selectAll" key="&selectAllCmd.key;" modifiers="accel"/>

     <key keycode="VK_BACK" command="cmd_handleBackspace" reserved="false"/>

Für alle, die nicht sprechen diff, bedeutet das: nach der Änderung der Datei browser/base/content/browser-sets.inc, um die Zeile zu ersetzen

<key id="key_delete" keycode="VK_DELETE" command="cmd_delete"/>

mit

<key id="key_delete" keycode="VK_DELETE" command="cmd_delete" reserved="false"/>

Wie inhttps://bugzilla.mozilla.org/show_bug.cgi?id=1445942, ein ähnliches Problem gab es früher Backspaceauch und wurde in einigen Unterversionen von Firefox 66 behoben. Das von mir beobachtete „Nur Windows“-Problem war also eigentlich nicht betriebssystemspezifisch, sondern eine Folge der Tatsache, dass die Firefox-Version auf den Windows-Rechnern meiner Universitätsbibliothek (66.0.1) etwas hinter der Version auf den Macs (66.0.3) und deutlich hinter der Version auf meinem eigenen Linux-Rechner (71.0.1) zurückblieb.

Ich habe einen neuen Fehler an Bugzilla übermittelt.https://bugzilla.mozilla.org/show_bug.cgi?id=1604970, mit dem oben genannten Patch. Die Antwort auf diese Frage wird also hoffentlich bald einfach „Firefox aktualisieren“ lauten.

Aber selbst wenn das passiert, werde ich diese Frage (und die Antwort) stehen lassen, damit jeder, der mit einer älteren Firefox-Version festsitzt und darauf stößt, davon profitieren kann. Denn dies ist eine relativ einfache (wenn auch ziemlich CPU-intensive), aber kaum intuitive Lösung für ein lästiges Problem.

verwandte Informationen