Pergunta

Estou escrevendo uma extensão do Chrome que inicia um script com um atalho de teclado. Funciona bem na maioria das páginas, mas percebi que no Gmail não funciona: parece que todos os eventos do teclado são capturados pelo Gmail e não estão borbulhados para minha função.

Eu tenho um script de conteúdo (na extensão do Chrome, isso é adicionado a qualquer página que desejar) que tenha (simplificado, é claro):

document.body.addEventListener('keypress', myFunction, true);
function myFunction(event) {
    console.log("yay, Gmail didn't let me down!");
}

Mas, na verdade, Gmail me decepciona. Eu sei que o script é carregado. Eu tentei diferentes variações de window.addEventListener e outros tipos de eventos sem sucesso.

Alguém conhece uma maneira de ignorar isso? Eu tentei ver se o script Greasemonkey poderia fazê -lo, que me trouxe aqui: http://code.google.com/p/gmail-greasonkey/ Mas isso não me ajudou.

Obrigado!

Foi útil?

Solução

Não conheço o funcionamento interno da captura de eventos do teclado do Gmail, mas recentemente escrevi um navegador de atalho simples de teclado (para que não preciso usar o mouse para clicar em links) para o Chrome.

Não é uma extensão, mas um script de usuário/Greasemonkey, mas é acionado digitando vírgula (,) duas vezes e funciona no Gmail.

Talvez isso ajude você a olhar para a fonte. Você pode baixá-lo aqui: http://userscripts.org/scripts/show/68609

Outras dicas

Ok, eu tenho uma solução de trabalho, projetada reversa do plug -in OnePassword. Só posso adivinhar por que isso funciona, eu suponho que seja por adicionar o evento aos elementos de entrada. No entanto, mude qualquer coisa e ele para de funcionar (a chamada de redir na parte inferior está na parte inferior por um motivo)

function redir(e) {
    e.focus();
    var h = document.createEvent("KeyboardEvent");
    h.initKeyboardEvent('keydown', true, true);
    e.dispatchEvent(h)
}
$("input").each(function(t,l) {redir(l)});

document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && e.keyCode) {
      if (e.keyCode == 190) {
        chrome.extension.sendRequest({name: "spot-openPopUp"});
      }
    }
},false);

redir(document.body);

Como você pode ver, usei redirecionamento. Este exemplo é realmente grosseiro, então não use apenas

Você pode tentar um processo de redirecionamento:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top