Pregunta

Estoy escribiendo una extensión de Chrome que lanza un script con un atajo de teclado. Trabaja muy bien en la mayoría de las páginas, pero me di cuenta que en Gmail no es así:., Parece que todos los eventos de teclado son capturados por Gmail y no se hace burbujear a mi función

Tengo un script de contenido (en extensión de Chrome esto se agrega a cualquier página que desea) que ha (simplificado por supuesto):

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

Pero, en realidad, Gmail no me ha defraudado. Sé que la secuencia de comandos es cargado. Probé diferentes variaciones de window.addEventListener y otros tipos de eventos en vano.

¿Alguien sabe de una manera de evitar esto? Traté de ver si Greasemonkey guión podría hacerlo, que me trajo aquí: http: // código. google.com/p/gmail-greasemonkey/ pero eso no me ayuda.

Gracias!

¿Fue útil?

Solución

No sé el funcionamiento interno de captura de eventos de teclado de Gmail, pero hace poco escribió un atajo de teclado simple navegador (por lo que no tengo que utilizar el ratón para hacer clic en enlaces) para Chrome.

No es una extensión, pero a / script de Greasemonkey usuario, pero es disparado por una coma tipificación (,) dos veces, y funciona en Gmail.

Tal vez que va a ayudar a mirar en la fuente. Puede descargarlo aquí: http://userscripts.org/scripts/show/68609

Otros consejos

Está bien que tengo una solución de trabajo, ingeniería inversa de la onePassword plugin. Sólo puedo imaginar por qué esto funciona, me Asume que es debido a la adición del evento a los elementos de entrada. Sin embargo cambiar nada y deja de funcionar (la llamada redir en la parte inferior está en la parte inferior por una razón)

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 se puede ver que la redirección usado. Este ejemplo es muy crudo por cierto por lo que no sólo lo utilizan

Se podría tratar de un proceso de redirección:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top