Cómo prohibir el acceso directo de teclado robado por sitios web en Firefox

57

Muchos sitios web, especialmente todo lo relacionado con la edición de texto enriquecido (este sitio también es culpable), roban atajos de teclado que normalmente se utilizan para controlar Firefox y hacer que hagan algo más. Es totalmente irritante cuando presiono algo como Cmd-number, Cmd-L, Cmd-T o Cmd-K y no hace lo que quiero que haga. ¿Puedo hacer que pare?

En realidad, probablemente sería lo mejor si pudiera prohibir el robo de todos los atajos de Cmd- *. Nunca los he visto utilizados para nada útil. ¿Es posible?

taw
fuente
44
De acuerdo, es irritante. FogBugz tiene una muy buena implementación de atajos de teclado. CTRL-;ingresa al modo de acceso directo y resalta todos los comandos visibles en la pantalla con los accesos directos disponibles. Cada acceso directo es un combo, por lo que el nuevo caso es CTRL-; Ny la edición es CTRL-; E. Muy fácil acostumbrarse y cero conflictos. Deseo que más sitios usen algo como esto porque es más fácil para el usuario y no anula los accesos directos del navegador. Lástima que SuperUser no haga esto, ya que es de las mismas personas que FogBugz.
Sam
Ver también superuser.com/questions/399352/…
Caracol mecánico el
1
Esto se está discutiendo en esta solicitud de función en Bugzilla .
Caracol mecánico
Visito muchas páginas de intranet en el trabajo que de alguna manera desordenan cmd + N, por lo que nunca puedo abrir nuevas ventanas del navegador desde el teclado. ¡Muy molesto!
Nicolas Miari
1
Después de ~ 12 años, Mozilla ha estabilizado una solución bastante razonable para esto. Está bien escondido e imperfecto, pero podría salvar tu cordura. Vea mi respuesta aquí: superuser.com/a/1317514/158390
Lambart

Respuestas:

24

Gracias a la nueva @run-atpropiedad de Greasemonkey , ¡esto ahora es posible!

Me inspiré en este script y este script para combinarlos en un Script de usuario que intercepta con éxito los atajos de teclado Ctrl+ Ty Ctrl+ S. Probé en Firefox 17 ESR y 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);
Martin JH
fuente
1
Esto fue muy útil. Usuarios de OS X deben intercambiar e.ctrlKeypor e.cmdKeyy e.cmdKey && e.shiftKeypara recuperar la mayor parte de sus atajos del navegador.
JamesGecko
Este script funciona para mí para corregir CTRL + TAB agregando 9a la matriz de códigos de teclas. ¡Gracias!
Mike Mueller
@JamesGecko Descubierto a través de esta respuesta, debería / podría usar la e.metaKey para la tecla de comando.
riezebosch 01 de
3
Este código funciona! Tenga en cuenta que filtra no solo Ctrl + Key, sino también Ctrl + Alt + Key, Ctrl + Shift + Key y Ctrl + Alt + Shift + Key, porque solo verifica el estado del modificador Ctrl.
RomanSt
Primera pregunta: para un script con reputación de funcionar en Firefox, ¿por qué comprueba si el navegador es Opera? Y segunda pregunta: el comentario dice códigos de caracteres para 's' y 't', pero los códigos son realmente para 'S' y 'T'. ¿Necesito especificar el código en mayúsculas por alguna razón? Gracias.
Douglas celebrada el
8

11 años después de que se archivó el error, Mozilla finalmente se puso a trabajar en esta solicitud de función popular, y parece estar funcionando bien ahora (probado en Firefox 66.0.3 / Ubuntu).

(Gracias a @PerJohansson por señalar que han hecho que la configuración sea mucho más difícil de encontrar desde FF 59).

Puede deshabilitar los accesos directos del sitio siguiendo estos pasos:

  1. Haz clic en el (i)ícono en la barra de ubicación
  2. Haga clic en la flecha pequeña ( >) a la derecha del elemento de estado "Conexión".
  3. Ahora, deberías ver More Informationen la parte inferior. Haga clic en eso y finalmente llegará al Page Infocuadro de diálogo.
  4. Finalmente, vaya a la Permissionspestaña y ajuste la Override Keyboard Shortcutsconfiguración.

Aquí hay algunas capturas de pantalla recientes (mayo de 2019) para cada paso:

Captura de pantalla del cuadro de diálogo Información del sitio de Firefox

Captura de pantalla del cuadro de diálogo Firefox Site Security

Captura de pantalla de la pestaña Permisos de Firefox

Si está interesado en el historial de esta solución, aquí están los tickets relacionados con Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 y https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942

Lambart
fuente
2
En Firefox 64 (sin saber dónde apareció), debe hacer clic en "Conexión" => "Más información" para acceder a este cuadro de diálogo. La rueda dentada de permisos entra en Preferencias, que no es el lugar correcto.
Por Johansson
Gracias @PerJohansson, he actualizado el ticket.
Lambart
¿Cuál es la about:configopción para cambiar el valor predeterminado? Quiero forzar a todos los sitios a no ser capaz de enganchar en mi teclado
inetknght
5

Una amplia investigación muestra que a partir de la versión actual de Firefox (3.6.x) esto es imposible: todos los conflictos vinculantes clave se resuelven con prioridades: Sistema> Sitio web> Firefox, un orden bastante estúpido. Ninguno de los complementos que he probado parece ser capaz de solucionarlo.

Posiblemente podría volverse factible en futuras versiones, pero en este momento la respuesta es: imposible.

taw
fuente
1
Usando FF 30.0 casi 4 años después y esto sigue siendo un problema. Probaré la idea de Martin Greasemonkey.
LGT
2
Usando FF 53.0 casi 8 años después y esto sigue siendo un problema.
Daniel
5

Dado que los problemas parecen ser eventos de teclado de JavaScript que roban las pulsaciones de teclas, ¿no sería posible crear un script de JavaScript (para ser utilizado a través de Greasemonkey) que desenlaza todos estos eventos de teclado, devolviendo así el uso adecuado de cada acceso directo al navegador?

No estoy seguro de qué tan factible es esto, pero alguien con más experiencia en JavaScript / Greasemonkey puede ayudar (puede valer la pena preguntar en SO).

DMA57361
fuente
2
Esto funciona a través del mecanismo onKeyPress: Firefox envía primero cada pulsación de tecla al sitio web, y solo lo mira después si no se canceló o interceptó. Podría ser posible algo de magia de Greasemonkey que intercepta las pulsaciones de teclas antes del sitio web y de alguna manera ejecuta las funciones de Firefox directamente, pero está lejos de ser obvio.
taw
4

El problema es que cualquier página puede ejecutar Javascript que configura un controlador de eventos para capturar eventos de pulsación de teclas, y los controles de JavaScript de Firefox no son lo suficientemente precisos para detenerlo sin romper otras características de JavaScript.

La única forma de evitar esto es deshabilitar Javascript (Herramientas -> Opciones, pestaña [Contenido], desmarque Habilitar JavaScript ). O puede deshabilitar Javascript por sitio con una extensión como NoScript.

Firefox le permite evitar ciertos usos de Javascript, como mover / cambiar el tamaño de las ventanas, cambiar o deshabilitar el menú contextual, etc. pero no hay nada que evite que los sitios web intercepten eventos de teclado.

Tal vez hay una extensión que le da este nivel de control, no estoy al tanto de una.
Hay opciones de Javascript , pero esa extensión ya no se actualiza.

njd
fuente
2
Las opciones de Javascript y algunas otras extensiones que probé no son compatibles con esto. Bloquear todos los javascript haría que la web sea prácticamente inutilizable, esta no es realmente una opción.
Taw
0

Es probable que los complementos de terceros se centren en la ventana principal del navegador. En ese caso, la entrada del teclado (excepto las interrupciones) será interceptada por el complemento. Si no le gusta esto, siempre puede eliminar los complementos ofensivos [Supongo que es probable que sea flash].

Daisetsu
fuente
3
Flash también lo hace, pero Javascript simple puede robar atajos. Comience una nueva pregunta aquí y presione Cmd-L (Ctrl-L en equipos que no sean Mac) en la ventana de texto de la pregunta. En lugar de ir a la barra de URL como debería, se robará el acceso directo y verá un cuadro de diálogo de inserción de hipervínculo. Solía ​​ser raro, pero muchos sitios web comenzaron a hacerlo recientemente.
taw
Lo probé en Windows 7 con Firefox y salté directamente a la barra de direcciones como lo hace normalmente.
Daisetsu
Lo siento, no estaba claro: esto solo ocurre cuando se selecciona el cuadro de diálogo de cuadro de texto enriquecido. ¿Hiciste eso? Probé en OSX con Firefox, Opera, Safari y Chrome. En los cuatro normalmente, Cmd-L salta a la barra de URL (y Ctrl-L no hace nada). Al editar el cuerpo de la pregunta, tanto Cmd-L como Ctrl-L muestran un cuadro de diálogo de hipervínculo.
taw
Parece que tienes razón. No tengo idea de cómo prevenir esto. :( Es una pregunta interesante ahora, así que estoy votando tu pregunta. Si nadie la responde, le daré una recompensa.
Daisetsu
El problema no es con los complementos. Los complementos son un problema separado por sí mismos. Y un problema diferente, después de todo. En los complementos, todo el foco es robado por el complemento, porque es una entidad separada. Con JavaScript, la interfaz de usuario de Firefox es JavaScript y tiene sus propios enlaces, pero los sitios pueden definir enlaces que están al mismo nivel. Hasta ahora, todavía no existe un mecanismo para evitar esto.
njsg
0

Después de muchas pruebas en varios navegadores, es más fácil interceptar las teclas cuando están presionadas (no presionadas) porque algunas de estas "teclas integradas en la aplicación" son difíciles de interceptar con el evento "presionar tecla".

Se me ocurrió este script que es compatible con varios navegadores (no probé el IE de Microsoft). Tenga en cuenta que los navegadores devuelven códigos diferentes para algunas claves. En mi caso, quería evitar Ctrl + P.

La clave "P" en Chrome se ve como e.keyCode == 80, en la ópera, lo es e.charCode == 16, mientras que en Firefox ese.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();
    }  
});

Usé jQuery.

Peter
fuente
0

Si desea deshabilitar cualquier tecla Ctrl que está siendo tomada por la página web, simplemente filtre los códigos de todas las letras desde az (basándose en la respuesta aceptada previamente y en funcionamiento)

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

Quizás pueda usar Autohotkey o Autoit, uno de esos programas y, si puede hacer combinaciones de teclas rápidas y vincularlas a las funciones de Firefox, diga

Ctrl-; T a nueva pestaña

Ctrl-; N a una nueva ventana, y así sucesivamente.

No sé cómo usar Autohotkey o Autoit, por lo que alguien más tendrá que verificar que esto pueda funcionar, solo ofrezco esto como una idea potencial.

Nathaniel Saxe
fuente
-2

La versión actual de Firefox nos permite "deshabilitar javascript para secuestrar el menú contextual":

Herramientas / Opciones / Contenido / Activar Javascript avanzado / Desactivar o reemplazar menús contextuales

Pero no hay una función para "deshabilitar javascript para secuestrar atajos de teclado".

PD. Odio el sitio web de Twitter, sus atajos de teclado entran en conflicto con los atajos de teclado basados ​​en mi sistema: J, K, L, I

He realizado una solicitud de función en bugzilla.mozilla.org, comente allí: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

diyism
fuente