Como proibir atalhos de teclado roubados por sites no Firefox

49

Muitos sites, especialmente tudo que envolve edição de rich text (este site também é culpado), roubam atalhos de teclado normalmente usados para controlar o Firefox e fazem com que eles façam outra coisa. É totalmente irritante quando eu pressiono algo como Cmd-number, Cmd-L, Cmd-T ou Cmd-K e ele não faz o que eu quero. Posso fazer isso parar?

Na verdade, provavelmente seria melhor se eu pudesse proibir o roubo de todos os atalhos do Cmd- *. Eu nunca os vi usado para nada útil. É possível?

    
por taw 27.07.2010 / 02:48

10 respostas

4

Extensa pesquisa mostra que a partir da versão atual do Firefox (3.6.x) isso é impossível - todos os principais conflitos de ligação são resolvidos com prioridades: System > Website > Firefox - uma ordem bastante estúpida que é. Nenhum dos addons que eu tentei parece ser capaz de consertar isso.

Possivelmente pode se tornar factível em versões futuras, mas agora a resposta é - Impossível.

    
por 05.08.2010 / 07:05
18

Graças à nova propriedade @run-at do Greasemonkey, isso agora é possível!

Eu me inspirei em este script e este script para combiná-los em um Userscript que intercepta com sucesso os atalhos de teclado Ctrl + T e Ctrl + < kbd> S . Eu testei no Firefox 17 ESR e 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);
    
por 05.11.2013 / 22:12
5

Como os problemas parecem ser eventos de teclado JavaScript roubados de pressionamentos de teclas, não seria possível criar um script JavaScript (para ser usado via Greasemonkey) que desvincule todos esses eventos de teclado, retornando assim o correto uso de cada atalho para o navegador?

Não sei ao certo como isso é viável, mas alguém com mais experiência em JavaScript / Greasemonkey pode ajudar (pode valer a pena perguntar sobre SO).

    
por 05.08.2010 / 10:37
4

O problema é que qualquer página pode executar Javascript que configura um manipulador de eventos para capturar eventos keypress, e os controles de javascript do Firefox não são suficientemente detalhados para interrompê-los sem quebrar outros recursos de javascript.

A única maneira de evitar isso é desativar o Javascript (Ferramentas - > Opções, guia [Conteúdo], desmarcar a opção Ativar JavaScript ). Ou você pode desativar o Javascript por site com uma extensão como NoScript.

O Firefox permite que você evite certas utilizações de Javascript, como mover / redimensionar janelas, alterar ou desativar o menu de contexto, etc; mas não há nada que impeça os sites de interceptar eventos de teclado.

Talvez haja uma extensão que forneça esse nível de controle - não tenho conhecimento de um.
Existem Opções Javascript , mas essa extensão não está mais sendo atualizada. p>     

por 30.07.2010 / 14:01
2

11 anos após o arquivamento do bug, a Mozilla finalmente começou a tomar uma ação no link , que é diretamente aborda esta questão.

Nas versões atuais do Firefox (estou usando v.59) há uma nova preferência por site, mas infelizmente é problemática (como discutido nos comentários recentes sobre o ticket de bug): Ele impede que o Backspace < As teclas / kbd> e Del funcionam no próprio navegador (por exemplo, para editar o texto digitado), o que provavelmente é um fator decisivo para a maioria das pessoas.

Mas você pode experimentar a implementação atual (e, esperamos, acessar uma versão fixa no Firefox 60) clicando no ícone (i) na Barra de Localização (ou pressionando Ctrl-I, presumindo que você esteja em um site que não sequestrou esse atalho), indo para a guia Permissions e ajustando a configuração Substituir atalhos de teclado:

Mas com aplicativos irresponsáveis (estou olhando para você , Atlassian) assumindo o seu teclado sem perguntar, eu ainda acho isso útil. Eu prefiro poder usar, e. my PageUp / PageDown e teclas de cursor para navegar pelo JIRA apenas como se fosse um aplicativo bem comportado e fácil de usar. É um pouco enlouquecedor, mas não é muito difícil desbloquear rapidamente atalhos para o site quando preciso escrever / editar um comentário.

    
por 26.04.2018 / 20:04
0

Após muitos testes em vários navegadores, é mais fácil interceptar as teclas quando elas estão inativas (não pressionadas) porque algumas dessas "chaves integradas ao aplicativo" são difíceis de interceptar com o evento "keypress".

Eu criei este script que é compatível com cross browser (eu não testei para o IE da Microsoft). Observe que os navegadores retornam códigos diferentes para algumas chaves. No meu caso eu queria evitar o Ctrl + P.

A chave "P" no chrome é vista como e.keyCode == 80 , na ópera, é e.charCode == 16 , enquanto no firefox é e.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();
    }  
});

Eu usei o jQuery.

    
por 08.06.2015 / 13:22
0

Se você quiser desativar qualquer tecla ctrl sendo usada pela página, basta filtrar os códigos de todas as letras de a-z (baseando-se na resposta previamente aceita e em funcionamento)

// ==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);
    
por 17.12.2017 / 10:34
0

É provável que plugins de terceiros estejam tomando o foco da janela principal do navegador. Nesse caso, a entrada do teclado (exceto as interrupções) será interceptada pelo plug-in. Se você não gostar disso, você sempre pode remover o (s) plugin (s) ofensivo (s) [Eu diria que é provável flash].

    
por 27.07.2010 / 03:08
-1

Talvez você possa usar Autohotkey ou Autoit, um desses programas e se você puder fazer combos de teclas de atalho e vinculá-los às funções do firefox, por exemplo

Ctrl-; T para nova guia

Ctrl-; N para nova janela e assim por diante.

Eu não sei como usar Autohotkey ou Autoit, então alguém terá que verificar se isso pode funcionar, eu só ofereço isso como uma idéia em potencial.

    
por 05.08.2010 / 10:27
-2

A versão atual do Firefox nos permite "desativar o javascript para seqüestrar o menu de contexto":

Tools/Options/Content/Enable Javascript Advanced/Disable or replace context menus

Mas não há recurso para "desabilitar o javascript para seqüestrar atalhos de teclado".

ps. Eu odeio o site do twitter, seus atalhos de teclado estão em conflito com meus atalhos de teclado baseados em sistema: J, K, L, I

Eu fiz uma solicitação de recurso no bugzilla.mozilla.org, por favor, comente lá: link

    
por 18.07.2012 / 08:19