%20no%20funciona%20en%20Firefox%20cuando%20los%20sitios%20no%20pueden%20anular%20los%20atajos%20de%20teclado%20(es%20decir%2C%20permisos.default.shortcuts%20%3D%202).png)
El valor predeterminado permissions.default.shortcuts
es 0
, que permite que las páginas web anulen la respuesta normal de Firefox a los atajos de teclado. Por ejemplo, Ctrl-R normalmente recargará la página, pero si permissions.default.shortcuts = 0
, Outlook Web Access interpretará Ctrl-R como "Responder a este mensaje".
Cuando se deja este valor predeterminado, los botones Backspace
y Delete
funcionan como se esperaba, tanto en las barras de URL y de búsqueda, como en los campos de entrada de texto de las páginas web: Backspace
elimina el carácter a la izquierda del cursor de texto y Delete
elimina el carácter a la derecha de el cursor de texto.
La configuración permissions.default.shortcuts = 2
impide que los sitios anulen los atajos de teclado, de modo que (por ejemplo) Ctrl-R recargará constantemente la página actual, independientemente de cuál sea esa página. (Esto también se puede hacer por sitio). Pero también tiene un efecto secundario extraño: el Delete
botón continúa funcionando cuando se usa en la URL y las barras de búsqueda, pero no hace nada cuando se usa en un campo de entrada de texto. No hay fallas ni comportamientos aberrantes; el texto simplemente no se modifica.
En Firefox 66.0.3 y posteriores, Backspace
sigue funcionando normalmente. En Firefox 66.0.1 y anteriores, por el contrario, Backspace
el problema es peor Delete
(detalles al final).
Nota: La respuesta aceptada ahora contiene una solución (parcial), y el resto de esta pregunta es principalmente información que proporcioné en un intento de ayudar a otra persona a descubrir qué estaba mal y cómo solucionarlo.Entonces, si está leyendo esta pregunta porque usted mismo está experimentando este problema y necesita una solución, probablemente pueda pasar a la respuesta aceptada desde aquí.y solo lea el resto de la pregunta si eso no resuelve su problema o si tiene curiosidad.
Posiblemente relacionado: lista de atajos de teclado de Mozilla (https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly) incluye, en el apartado "Edición", la entrada:
Command Shortcut
Delete Del
No tengo idea de cómo eso puede considerarse un "atajo", a diferencia de la entrada de texto normal (en particular, Backspace
esnoaparece como un "atajo" en la sección de edición), ni por qué no permitir que los sitios lo "anulen" debería resultar en que no suceda nada en absoluto, en lugar dealgosiendo eliminado. Pero la lista de Del
/ Delete
como método abreviado de teclado parece un posible vínculo entre la causa (no permitir que los sitios anulen los métodos abreviados de teclado) y el efecto ( Delete
no funciona en campos de entrada de texto, en sitios web).
También he verificado que no es necesario que un sitio intente anular nada (en absoluto) para observar este error; el siguiente HTML es suficiente (tanto para que Delete
funcione como se esperaba if permissions.default.shortcuts = 0
como para que no haga nada if permissions.default.shortcuts = 2
):
<!DOCTYPE html>
<html>
<body>
Text box: <input type="text">
</body>
</html>
Este comportamiento también es consistente en numerosos sitios web reales (he confirmado Stack Exchange, Google y la página de correo electrónico de Outlook Web App de mi universidad), y no he observado ningún sitio web en el que no ocurra. Ocurre independientemente de si uso el botón Eliminar en el teclado integrado de mi computadora portátil o en mi teclado USB.
Finalmente, observé los siguientes resultados en Javascript Key Event Tester (https://unixpapa.com/js/testkey.html) (nada suprimido, se muestran todos los valores de los atributos, cuadro de entrada de texto enfocado antes de escribir):
Backspace
proporciona:
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
independientemente del valor de permissions.default.shortcuts
(o browser.backspace_action
, para aquellos que leen la letra pequeña a continuación). Al dividir la línea conjunta (presumiblemente debido a que se aplica el retroceso a un retorno de carro) y omitir los atributos que resultan ser los mismos para todas estas pruebas, se obtiene:
keydown keyCode=8 which=8
key=Backspace
keyup keyCode=8 which=8
key=Backspace
Por el contrario, presionar Delete
da
keydown keyCode=46 (.) which=46 (.)
key=Delete
keyup keyCode=46 (.) which=46 (.)
key=Delete
si permissions.default.shortcuts = 0
(es decir, cuando Delete
funciona como se esperaba), pero sólo
keyup keyCode=46 (.) which=46 (.)
key=Delete
if permissions.default.shortcuts = 2
(es decir, cuando Delete
no hace nada en los campos de entrada de texto). Es decir, la tecla de activación está presente, pero falta la tecla de pulsación. (Lo cual es extraño).
Entonces, mi pregunta central es:¿Cómo evito que los sitios web anulen los atajos de teclado reales de Firefox, que realmente hacen algo, sin romperse Delete
?
Algunos detalles técnicos sobre mi sistema (puedo proporcionar más si es útil, aunque el hecho de que obtuve resultados similares (o peores) en otras dos computadoras (de la biblioteca) sugiere que probablemente esto no sea específico del sistema o del hardware): Estoy usando Firefox 71.0 (64 bits), en Ubuntu (18.04.1), en una computadora portátil Dell Precision 5540 (i7-9750H). Mi teclado externo es un Microsoft Natural Ergonómico Keyboard 4000, para el cual no he instalado ningún software especial ni he reasignado ninguna tecla.
cat /etc/default/keyboard
da
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
¿Cómo Backspace
se rompe también (y más) en 66.0.1 y versiones anteriores?: ¿Qué pasa si presionas?Backspace
sinenfocar un campo de entrada de texto está controlado por browser.backspace_action
. 0
(el valor predeterminado en Windows) indica "navegar a la página anterior", 1
indica "desplazarse hacia arriba" e 2
indica "no hacer nada".
Sin embargo, en versiones de Firefox anteriores a 66.0.2 o 66.0.3 (no estoy seguro de cuál), la configuración permissions.default.shortcuts = 2
hace que Backspace
se comporte igual independientemente de si un campo de entrada de texto está enfocado.
Entonces, si browser.backspace_action
está configurado en 2
, presionar Backspace
está tan roto como Delete
está, pero nada más. Si browser.backspace_action
se establece en 1
, es sólo marginalmente peor; la página saltará inesperadamente, pero no sucederá nada más. Pero si está configurado en 0
(que es, nuevamente, el valor predeterminado de Windows), al presionar Backspace
, incluso con un cuadro de entrada de texto enfocado, saldrá de la página para regresar a la anterior.
(Inicialmente creí que el Backspace
problema era específico de Windows, porque lo observé en computadoras (biblioteca universitaria) que ejecutaban Windows y Firefox 66.0.1, pero no en computadoras (biblioteca universitaria) que ejecutaban MacOS y Firefox 66.0.3 (ni en la mía). computadora, ejecutando Linux y Firefox 77.0.1). Pero resulta que esa diferencia de dos versiones menores se da cuando alguien en Mozilla parcheó el código para corregir ese error tal como se aplicaba a Backspace
, pero se olvidó de hacer algunas cosas. se aplicó (más suavemente) a Delete
.)
Respuesta1
La solución inmediata es compilar Firefox desde el código fuente, después de aplicar el parche (para la versión estable actual, 71.0.1, aunque debería ser el mismo para muchas versiones anteriores (al menos hasta la 66.0.x, y probablemente posteriores), aparte de diferencias en numeración de líneas y hashes):
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"/>
Para cualquiera que no hable diff
, eso significa: después de modificar el archivo browser/base/content/browser-sets.inc
para reemplazar la línea
<key id="key_delete" keycode="VK_DELETE" command="cmd_delete"/>
con
<key id="key_delete" keycode="VK_DELETE" command="cmd_delete" reserved="false"/>
Como se indica enhttps://bugzilla.mozilla.org/show_bug.cgi?id=1445942, también existía un problema análogo Backspace
y se solucionó en alguna subversión de Firefox 66. Por lo tanto, el problema "solo para Windows" que observé en realidad no era específico del sistema operativo, sino un resultado de la versión de Firefox. que tiene la biblioteca de mi universidad en sus máquinas con Windows (66.0.1), estando ligeramente por detrás de la versión en sus Mac (66.0.3), y muy por detrás de la versión en mi propia computadora, Linux (71.0.1).
He enviado un nuevo error a Bugzilla,https://bugzilla.mozilla.org/show_bug.cgi?id=1604970, con el parche de arriba. Entonces, con suerte, la respuesta a esta pregunta pronto será simplemente "Actualizar Firefox".
Sin embargo, incluso cuando eso suceda, planeo dejar esta pregunta (y respuesta) para que cualquiera que se quede con una versión anterior de Firefox y la encuentre pueda beneficiarse. Porque se trata de una solución relativamente sencilla (aunque más bien consume mucho tiempo de CPU), pero poco intuitiva para un problema desagradable.