Como impedir que as páginas visitadas substituam as teclas de atalho selecionadas do Firefox?

40

No Firefox, como impedir que as páginas substituam os atalhos de teclado internos do Firefox por meio do Javascript, por chave? De preferência também por site? A substituição mais frustrante é a barra ('/') vinculada ao "Localizar na página". Sites como resultados de pesquisa do Google, linhas de tempo do Twitter, alguns wikis e outras páginas roubam a barra para suas próprias caixas de pesquisa, o que é completamente errado.

Como meu representante me permite fazer, editar e responder perguntas, mas não adicionar comentários, essa é basicamente uma duplicata dessas outras duas perguntas que não foram respondidas corretamente:

Como parar um site por substituir os atalhos do meu teclado

Firefox: não permita que sites substituam a tecla / (barra)

Secure Shel
fonte
11
Fico frustrado com o phpMyAdmin primordial Ctrl- <seta para a esquerda> ... é uma boa pergunta
altamente irregular
11
Não suporto sites que substituem o comportamento padrão. Muito o faz com cliques do meio também. Veja esta pergunta relacionada para uma solução para esse problema.
Cam Jackson

Respostas:

12

Com base na resposta de edymtt, criei um script de usuário que desativa apenas atalhos de teclado específicos. Você pode adicionar mais atalhos para desativar adicionando códigos de chave à matriz de códigos de chave ou restringir a quais sites aplicar, substituindo a @includetag por um ou mais padrões.

Instale 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
fonte
2
Impressionante! Solução quase completa também para meta-chaves --- Eu estava tentando impedir o Google Docs de interceptar as guias Anterior (Cmd + Esquerda) e Próximo (Cmd + Direita) e descobri que também precisava definir useCapture como verdadeiro; ou seja, document.addEventListener ('keydown', yourHandlerFn, true)
chbrown
11
nota que o valor 191depende do seu layout de teclado, tanto quanto a minha configuração azerty está em causa (eu tenho 16 + 58 para a área de alfa e 111 para o teclado numérico)
sylvainulg
2
e infelizmente não funciona mais hoje em dia (testado no phabricator e no twitter). o ouvinte personalizado é acionado, mas o evento do site é acionado de qualquer maneira e a 'pesquisa na página' não é exibida.
Sylvainulg
11
@sylvainulg Vejo que não funciona no Twitter, mas pelo menos funciona no GitHub ainda. Eu me pergunto o que mudou.
binki
Isso funciona em qualquer lugar que eu tentei, exceto o php.net. Gostaria de saber qual evento eles estão usando.
Qwazix
8

No que diz respeito ao Google e ao atalho Pesquisa rápida, você pode instalar este script Greasemonkey:

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

Como a descrição diz, "impede que o Google concentre a entrada de pesquisa em cada pressionamento de tecla" - em particular, se você pressionar /com o foco do teclado fora da caixa de pesquisa, a Pesquisa Rápida será exibida, assim como em outros sites.

Eu o instalei apenas sem tocar no código, mas acho que poderia ser facilmente adaptado para trabalhar com outros sites e / ou outros atalhos.

edymtt
fonte
Para esclarecer: este script de usuário interrompe TODOS os atalhos de teclado nas páginas para as quais está ativado, preservando a funcionalidade do navegador. Para aplicá-lo a outros sites, basta adicionar mais tags @include.
MikeFHay
sem qualquer informação sobre o que está oculto por trás do link, infelizmente a resposta é inútil quando o userscripts-mirror.org é desativado, bloqueado por um firewall ou qualquer outra coisa.
Sylvainulg
8

Desde o Firefox 58, é possível desativar a substituição de atalhos de teclado por site.

"Substituir atalhos de teclado" e muitas outras permissões estão disponíveis em "Informações da página -> Permissões" (abaixo do ícone de informações na barra de URL).

Exemplo de permissões do Firefox para superuser.com

A substituição do teclado foi introduzida no Firefox # 380637

Alec Istomin
fonte
11
Sim, depois de 11 anos, eles finalmente fizeram um trabalho meio burro de consertar esse ingresso. Infelizmente, a implementação atual (ainda no FF 59) desativa completamente as teclas Backspacee Delete, o que é realmente péssimo.
26618 Lambart
6
Além disso, infelizmente, não impede que as páginas web de captura (ou seja, não não mudou Ctrl, Shiftou Altchave) de entrada - o que significa isso não ajuda em tudo com a tecla de barra mencionado na pergunta original.
26618 Lambart
@Lambart - bom saber, acabei não usando isso também, já que os atalhos de teclado do Firefox tornou-se fixo no JIRA e confluência (algo em torno de firefox 59)
Alec Istomin
2
o que foi consertado? O JIRA e o Confluence ainda pegam todos os tipos de chaves que interrompem constantemente meu fluxo de trabalho. Vejo isso como um problema de Atlassian: eles precisam permitir que as pessoas desativem (e / ou alterem) seus "atalhos".
28618 Lambart
firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592 fixo produtos Atlassian para mim (pode ter havido correções Atlassian em mesmo período de tempo)
Alec Istomin
0

Aqui está um script mais geral - você pode definir qualquer número de eventos de pressionamento de tecla para desativar.

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
fonte
Sinto muito - mas não consigo fazer isso funcionar. Especialmente, quero desativar as teclas de seta esquerda e direita em um site - mas com esse script as teclas de seta ainda controlam o site ???
Christian Herenz 04/12/2015
-3

O complemento YesScript foi a solução sem complicações para mim. Impede que sites executem JavaScript, mas apenas os sites que você escolher. Na maioria das vezes, esses sites sequestram o atalho de teclado por JavaScript. Eu descobri sobre isso neste formulário de artigo Ghacks.net.

Irmãos Phoenix
fonte