Como proibir o roubo de atalhos de teclado por sites no Firefox


57

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 os fazem fazer outra coisa. É totalmente irritante quando pressiono algo como Cmd-number, Cmd-L, Cmd-T ou Cmd-K e ele não faz o que eu quero. Posso fazer parar?

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


4
Concordou, é irritante. O FogBugz possui uma implementação muito boa de atalhos de teclado. CTRL-;entra no modo de atalho e destaca todos os comandos visíveis na tela com os atalhos disponíveis. Cada atalho é uma combinação, portanto, o novo caso é CTRL-; Ne a edição é CTRL-; E. Muito fácil de se acostumar e zero conflitos. Eu gostaria que mais sites usassem algo assim, porque é mais fácil para o usuário e não substitui os atalhos do navegador. Pena que o SuperUser não faz isso, pois é da mesma pessoa que o FogBugz.
Sam



Visito muitas páginas da intranet em funcionamento que, de alguma forma, atrapalham o cmd + N, para que eu nunca possa abrir novas janelas do navegador usando o teclado! Tão irritante!
Nicolas Miari

11
Após cerca de 12 anos, a Mozilla estabilizou uma correção bastante razoável para isso. É bem escondido e imperfeito, mas pode salvar sua sanidade. Veja minha resposta aqui: superuser.com/a/1317514/158390
Lambart

Respostas:


24

Graças à nova @run-atpropriedade de Greasemonkey , isso agora é possível!

Eu me inspirei neste script e neste script para combiná-los em um Userscript que intercepta com êxito os atalhos de teclado Ctrl+ Te Ctrl+ 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);

11
Isso foi muito útil. Usuários OS X devem trocar e.ctrlKeyde e.cmdKeye e.cmdKey && e.shiftKeypara recuperar a maioria de seus atalhos do browser.
JamesGecko

Esse script funciona para eu corrigir CTRL + TAB adicionando 9à matriz de códigos de chave. Obrigado!
Mike Mueller

@JamesGecko Descoberto através desta resposta, você deve / poderia usar o e.metaKey para a chave de comando.
Riezebosch #

3
Este código funciona! Lembre-se de que ele filtra não apenas Ctrl + Tecla, mas também Ctrl + Alt + Tecla, Ctrl + Shift + Tecla e Ctrl + Alt + Shift + Tecla, porque verifica apenas o estado do modificador Ctrl.
RomanSt

Primeira pergunta: para um script que funcione no Firefox, por que ele verifica se o navegador é Opera? E segunda pergunta: o comentário diz códigos de caracteres para 's' e 't', mas os códigos são realmente para 'S' e 'T'. Preciso especificar o código em maiúsculas por algum motivo? Obrigado.
Douglas Held

8

11 anos após o bug ser arquivado, a Mozilla finalmente começou a trabalhar nessa popular solicitação de recurso, e parece estar funcionando bem agora (testado no Firefox 66.0.3 / Ubuntu).

(Obrigado a @PerJohansson por apontar que eles tornaram a configuração muito mais difícil de encontrar desde o FF 59.)

Você pode desativar os atalhos do site seguindo estas etapas:

  1. Clique no (i)ícone na barra de localização
  2. Clique na seta pequena ( >) à direita do item de status "Conexão".
  3. Agora, você deve ver More Informationna parte inferior. Clique nele e você finalmente chegará à Page Infocaixa de diálogo.
  4. Por fim, vá para a Permissionsguia e ajuste a Override Keyboard Shortcutsconfiguração.

Aqui estão algumas capturas de tela recentes (maio de 2019) para cada etapa:

Captura de tela da caixa de diálogo Informações do site do Firefox

Captura de tela da caixa de diálogo Firefox Site Security

Captura de tela da guia Permissões do Firefox

Se você estiver interessado no histórico dessa correção, veja os tickets relacionados ao Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 e https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942


2
No Firefox 64 (sem saber onde ele apareceu), você deve clicar em "Conexão" => "Mais informações" para acessar esta caixa de identificação. A roda dentada de permissões vai para as Preferências, que não é o lugar certo.
Por Johansson

Obrigado @PerJohansson, atualizei o ticket.
Lambart 14/01

Qual é a about:configopção para alterar o padrão? Quero forçar todos os sites a não conseguirem conectar-se ao meu teclado
inetknght 31/10

5

Uma extensa pesquisa mostra que, na versão atual do Firefox (3.6.x), isso é impossível - todos os principais conflitos de ligação são resolvidos com prioridades: Sistema> Site> Firefox - uma ordem bastante estúpida. Nenhum dos addons que tentei parece ser capaz de corrigi-lo.

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


11
Usando o FF 30.0 quase 4 anos depois, isso ainda é um problema. Vou tentar a idéia de Martin Greasemonkey.
LGT 28/07

2
Usando o FF 53.0 quase 8 anos depois, isso ainda é um problema.
Daniel

5

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

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


2
Isso funciona através do mecanismo onKeyPress - o Firefox envia todas as teclas pressionadas para o site primeiro e só as analisa depois se não tiver sido cancelado ou interceptado. Alguma mágica da Greasemonkey que interceptaria as teclas pressionadas antes do site e, de alguma forma, executaria diretamente as funções do Firefox, pode ser possível, mas está longe de ser óbvia.
taw

4

O problema é que qualquer página pode executar Javascript que configura um manipulador de eventos para capturar eventos de pressionamento de tecla, e os controles javascript do Firefox não são suficientemente refinados para impedi-lo sem interromper outros recursos javascript.

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

O Firefox permite impedir certos usos do Javascript, como mover / redimensionar janelas, alterar ou desativar o menu de contexto, etc; mas não há nada para impedir que sites interceptem eventos do teclado.

Talvez haja uma extensão que dê esse nível de controle - não conheço uma.
opções de Javascript , mas essa extensão não está mais sendo atualizada.


2
Opções de Javascript e algumas outras extensões que tentei não suportam isso. O bloqueio de todo o javascript tornaria a Web praticamente inutilizável; essa não é realmente uma opção.
TAW

0

É provável que plugins de terceiros estejam focando na janela principal do navegador. Nesse caso, a entrada do teclado (exceto interrupções) será interceptada pelo plug-in. Se você não gosta disso, sempre pode remover o (s) plug-in (s) ofensivo (eu suponho que é provavelmente flash).


3
O Flash também faz isso, mas o Javascript comum pode roubar atalhos. Inicie uma nova pergunta aqui e pressione Cmd-L (Ctrl-L em não Macs) enquanto estiver na janela de texto da pergunta. Em vez de ir para a barra de URL como deveria, o atalho será roubado e você verá uma caixa de diálogo de inserção de hiperlink. Costumava ser raro, mas muitos sites começaram a fazê-lo recentemente.
TAW

Eu apenas tentei no Windows 7 executando o Firefox e pulei diretamente para a barra de endereços, como normalmente faz.
Daisetsu

Desculpe, eu não estava claro - isso só acontece quando a caixa de diálogo rich textbox é selecionada. Você fez isso? Eu testei no OSX com Firefox, Opera, Safari e Chrome. Nos quatro, o Cmd-L normalmente salta para a barra de URL (e Ctrl-L não faz nada). Ao editar o corpo da pergunta, Cmd-L e Ctrl-L mostram a caixa de diálogo Inserir hiperlink.
TAW

Parece que você está certo. Não tenho ideia de como evitar isso. :( É uma pergunta interessante agora, então estou votando positivamente na sua pergunta. Se ninguém responder, vou dar uma recompensa. #
Daisetsu

O problema não está nos plugins. Os plug-ins são um problema separado por si mesmos. E um problema diferente, afinal. Nos plugins, todo o foco é roubado pelo plug-in, porque é uma entidade separada. Com JavaScript, a interface do usuário do firefox é JavaScript e possui suas próprias ligações, mas os sites podem definir ligações que estão no mesmo nível. Até o momento, ainda não existe um mecanismo para evitar isso.
njsg

0

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

Eu vim com esse script que é compatível com vários navegadores (não testei o IE da Microsoft). Observe que os navegadores retornam códigos diferentes para algumas chaves. No meu caso, eu queria impedir Ctrl + P.

A tecla "P" no chrome é vista como e.keyCode == 80na ó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.


0

Se você deseja desativar qualquer tecla ctrl que está sendo adquirida pela página da Web, basta filtrar todos os códigos das letras de az (com base na resposta aceita e funcional anteriormente)

// ==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);

-1

Talvez você possa usar o Autohotkey ou o Autoit, um desses programas, e se você puder fazer combinações de teclas de atalho e vinculá-las às funções do Firefox, digamos

Ctrl-; T para nova guia

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

Não sei como usar a Autohotkey ou a Autoit, para que outra pessoa precise verificar se isso pode funcionar, apenas ofereço isso como uma ideia em potencial.


-2

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

Ferramentas / Opções / Conteúdo / Ativar Javascript Avançado / Desativar ou substituir menus de contexto

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

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

Fiz uma solicitação de recurso no bugzilla.mozilla.org, comente aqui: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.