Gmail parece capturar todos los eventos de teclado. Cualquier camino que recorrer alrededor de ese?
-
22-09-2019 - |
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!
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);
}