¿Cómo evito que las páginas que visito anulen las teclas de acceso directo de Firefox seleccionadas?

40

En Firefox, ¿cómo puedo evitar que las páginas anulen los métodos abreviados de teclado integrados de Firefox a través de Javascript por tecla? ¿Preferentemente por sitio, también? La anulación más frustrante es la barra diagonal ('/') que está vinculada a "Buscar en la página". Sitios como los resultados de búsqueda de Google, las líneas de tiempo de Twitter, algunos wikis y otras páginas roban la barra diagonal para sus propios cuadros de búsqueda, lo cual es completamente incorrecto.

Como mi representante me permite hacer, editar y responder preguntas, pero no agregar comentarios, esto es básicamente un duplicado de estas otras dos preguntas que no fueron respondidas correctamente:

¿Cómo detener un sitio web para anular los atajos de teclado?

Firefox: no permita que los sitios web anulen la tecla / (barra oblicua)

Shel seguro
fuente
1
Me siento frustrado con PHPMyAdmin anulando ctrl- <flecha izquierda> ... es una buena pregunta
Muy irregular
1
No soporto los sitios web que anulan el comportamiento predeterminado. Muchos lo hacen con clics medios también. Vea esta pregunta relacionada para una solución a ese problema.
Cam Jackson

Respuestas:

12

Sobre la base de la respuesta de edymtt, he creado un script de usuario que deshabilita solo atajos de teclado específicos. Puede agregar más accesos directos para deshabilitar agregando códigos de teclas a la matriz de códigos de teclas, o restringir a qué sitios aplicarlos reemplazando la @includeetiqueta con uno o más patrones.

Instalar usando greasemonkey .

// ==UserScript==
// @name           Disable keyboard shortcuts
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

keycodes = [191] // Keycode for '/', add more keycodes to disable other key captures

document.addEventListener('keydown', function(e) {
//    alert(e.keyCode); //uncomment to find out the keycode for any given key
    if (keycodes.indexOf(e.keyCode) != -1)
    {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
});
MikeFHay
fuente
2
¡Increíble! Solución casi completa para meta-claves, también --- Estaba tratando de evitar que Google Docs interceptara la pestaña Anterior (Cmd + Izquierda) y la Siguiente pestaña (Cmd + Derecha) y descubrí que también necesitaba establecer useCapture en verdadero; es decir, document.addEventListener ('keydown', yourHandlerFn, verdadero)
chbrown
1
tenga en cuenta que el valor 191depende de la distribución de su teclado, en lo que respecta a mi configuración de azerty (tengo 16 + 58 para el área alfa y 111 para el teclado numérico)
sylvainulg
2
y desafortunadamente ya no funciona (probado en phabricator y twitter). el activador de escucha personalizado se activa pero el evento del sitio se activa de todos modos y la 'búsqueda en la página' no aparece.
sylvainulg
1
@sylvainulg Veo que no funciona en Twitter, pero al menos todavía funciona en GitHub. Me pregunto qué cambió.
binki
Esto funciona en todos los lugares donde lo probé, excepto php.net. Me pregunto qué evento están usando.
qwazix
8

Con respecto a Google y al acceso directo de Búsqueda rápida, puede instalar este script de Greasemonkey:

http://userscripts-mirror.org/scripts/show/132237

Como dice la descripción, "impide que Google enfoque la entrada de búsqueda en cada pulsación de tecla", en particular, si presiona /con el foco del teclado fuera del cuadro de búsqueda, aparecerá la Búsqueda rápida, como en otros sitios web.

Solo lo instalé sin tocar el código, pero creo que podría adaptarse fácilmente para trabajar con otros sitios u otros accesos directos.

edymtt
fuente
Para aclarar: este script de usuario detiene TODOS los atajos de teclado en las páginas para las que está habilitado, preservando la funcionalidad del navegador. Para aplicarlo a otros sitios web, simplemente agregue más etiquetas @include.
MikeFHay
sin ninguna información sobre lo que se esconde detrás del enlace, la respuesta es desafortunadamente inútil cuando userscripts-mirror.org se cae, bloqueado por un firewall o lo que sea.
sylvainulg
8

Desde Firefox 58 es posible deshabilitar la anulación de atajos de teclado por sitio web.

"Anular atajos de teclado" y muchos otros permisos están disponibles en "Información de la página -> Permisos" (debajo del icono de información en la barra de URL).

Ejemplo de permisos de Firefox para superuser.com

La anulación del teclado se introdujo en Firefox # 380637

Alec Istomin
fuente
1
Sí, después de 11 años, finalmente hicieron un trabajo a medias para arreglar ese boleto. Desafortunadamente, la implementación actual (todavía en FF 59) desactiva por completo las teclas Backspacey Delete, lo que realmente apesta.
Lambart
66
También, por desgracia, no impide que las páginas web de captura (es decir, sin no desplazada Ctrl, Shifto Altkey) - lo que significa que esto no ayuda en absoluto con la tecla de barra mencionado en la pregunta original.
Lambart
@Lambart: es bueno saber que terminé sin usar esto también, ya que los atajos de teclado de Firefox se arreglaron en jira y confluencia (en algún lugar alrededor de Firefox 59)
Alec Istomin
2
¿Qué fue arreglado? JIRA y Confluence todavía toman todo tipo de claves que constantemente interrumpen mi flujo de trabajo. Veo esto como un problema de Atlassian: necesitan permitir que las personas deshabiliten (y / o cambien) sus "accesos directos".
Lambart
Firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592~~V~~aux~~singular~~3rd fija productos de Atlassian para mí (que podría haber sido correcciones de Atlassian en el mismo período de tiempo)
Alec Istomin
0

Aquí hay un script más general: puede definir cualquier número de eventos de pulsación de teclas para deshabilitar.

https://greasyfork.org/en/scripts/5819-disable-website-keyboard-hooks

// ==UserScript==
// @name           Disable website keyboard hooks
// @description    Stop websites from hijacking keyboard shortcuts.
// @author         Isaac Levy
// @run-at         document-start
// @include        *
// @grant          none
// @version        0.0.1
// @namespace      https://isaacrlevy.com
// ==/UserScript==

var keycodes = [ // Add keycodes as desired, keep sorted.
    37, 38, 39, 40 // Arrow keys.
]

var meta_keycodes = [ // Disable these when meta key is pressed.
    70
];

// Don't change below this line.

var isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0;

// Create a fast lookup.
// This saves work during normal typing. Maybe unnecessary.
var keycode_offset = keycodes[0];
var keycode_arr = Array(keycodes[keycodes.length - 1] - keycode_offset)
for (var i = 0, len = keycodes.length; i < len; i++) {
    keycode_arr[keycodes[i] - keycode_offset] = true;
}

document.addEventListener('keydown', function(e) {
    //console.log(e);
    if ((isMac && e.metaKey) || (!isMac && e.ctrlKey)) {
        if (meta_keycodes.indexOf(e.keyCode) >= 0) {
            e.stopImmediatePropagation();
        }
    } else if (keycode_arr[e.keyCode - keycode_offset]) {
        e.stopImmediatePropagation();
    }
    return false;
});
vackamole
fuente
Lo siento, pero no puedo hacer que esto funcione. Especialmente quiero deshabilitar las teclas de flecha izquierda y derecha en un sitio, pero con este script las teclas de flecha aún controlan el sitio ???
Christian Herenz
-3

El complemento YesScript fue la solución sin problemas para mí. Impide que los sitios ejecuten JavaScript, pero solo los sitios que elija. La mayoría de las veces estos sitios secuestran atajos de teclado mediante JavaScript. Lo encontré en este artículo de Ghacks.net.

Hermanos Fénix
fuente