10

Estoy escribiendo una extensión de Chrome que inicia una secuencia de comandos con un atajo de teclado. Funciona bien en la mayoría de las páginas, pero me di cuenta de que en Gmail no: parece que todos los eventos de teclado son capturados por Gmail y no se borran a mi función.Gmail parece capturar todos los eventos del teclado. ¿Alguna forma de sortear eso?

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 está cargada. Intenté diferentes variaciones de window.addEventListener y otros tipos de eventos en vano.

¿Alguien sabe de una manera de eludir esto? Traté de ver si el script de GreaseMonkey podía hacerlo, eso me trajo aquí: http://code.google.com/p/gmail-greasemonkey/ pero eso no me ayudó.

Gracias!

+0

Puede solicitar a todos sus usuarios que desactiven los atajos de teclado en su configuración de Gmail. Pero puede que no les guste eso. Y no estoy seguro si funcionaría de todos modos. – MatrixFrog

+1

No, eso no es realmente factible. Mi extensión no está funcionando con honestidad, así que no puedo imaginar a nadie que acepte esa compensación. Además, soy el único usuario en este momento, por lo que no me gustaría que :) –

Respuesta

1

no sé el funcionamiento interno del evento de teclado de Gmail captura, pero hace poco escribió un atajo de teclado simple navegador (por lo que no tengo que usa el mouse para hacer clic en enlaces) para Chrome.

No es una extensión, sino un script de usuario/Greasemonkey, pero se activa al escribir comas (,) dos veces, y funciona en GMail.

Quizás te ayude a mirar la fuente. Puede descargarlo aquí: http://userscripts.org/scripts/show/68609

+0

Gracias, echaré un vistazo y trataré de llegar a lo que necesito. Actualizaré si lo hago. –

+4

Ok, lo descubrí. Resulta que realmente no estaba relacionado con la captura de Gmail del evento y su mantenimiento: hay una configuración de extensiones de Chrome que hace que el script coincida con todos los cuadros o solo con el superior. De manera predeterminada, solo está en la parte superior, y Gmail usa iframes. Así que mi script no se cargó donde lo necesitaba. (http://code.google.com/chrome/extensions/content_scripts.html) Gracias por el ejemplo de trabajo, me ayudó a profundizar aún más. –

+0

¡Genial! ... ¡y buena suerte! –

0

Usted 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); 
} 
+0

'document.body.onkeypress' devuelve nulo sin embargo. ¿Qué diferencia hacen los dos métodos? En la duda, intenté hacer 'document.body.onkeypress = function() {alert ('sdf');}' así como 'window.onkeypress' sin mejores resultados. –

1

Bien, tengo una solución de trabajo, ingeniería inversa del complemento onePassword. Solo puedo adivinar por qué funciona esto, supongo que es por agregar el 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 Solía ​​redirección. Este ejemplo es realmente crudo por lo que no solo lo use

+0

Podrías echarle un vistazo a lo que terminé haciendo: https://github.com/Timothee/LogMeOutThx/blob /master/Chrome%20extension/content_script.js (nota: esto todavía está en proceso; ;)) No necesité hacer ninguna redirección. Lo principal que me faltaba estaba en el manifiesto: https://github.com/Timothee/LogMeOutThx/blob/master/Chrome%20extension/manifest.json y agregando "all_frames": true –

+0

Olvidé mencionar, también Tuve que agregar all_frames. Gracias por los enlaces – Thomas

Cuestiones relacionadas