Domanda

Sto scrivendo un'estensione Chrome che lancia uno script con una scorciatoia da tastiera. Funziona bene sulla maggior parte delle pagine, ma mi sono reso conto che su Gmail non è così:. Sembra che tutti gli eventi della tastiera vengono catturati da Gmail e non sono gorgogliare fino a mia funzione

Ho uno script di contenuti (in estensione Chrome questo viene aggiunto a qualsiasi pagina che si desidera) che ha (semplificato ovviamente):

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

Ma in realtà, in Gmail non let me down. So che lo script è caricato. Ho provato diverse varianti di window.addEventListener e di altri tipi di evento senza alcun risultato.

Qualcuno sa di un modo per bypassare questo? Ho provato a vedere se lo script GreaseMonkey poteva farlo, che mi ha portato qui: http: // codice. google.com/p/gmail-greasemonkey/ ma questo non mi ha aiutato.

Grazie!

È stato utile?

Soluzione

Non conosco il funzionamento interno di tastiera cattura l'evento di GMail, ma di recente ho scritto un semplice scorciatoia da tastiera navigatore (in modo da non dover utilizzare il mouse per fare clic sui link) per Chrome.

Non è una proroga, ma uno script utente / Greasemonkey, ma è innescato digitando una virgola (,) due volte, e funziona in GMail.

Forse vi aiuterà a guardare alla fonte. Potete scaricarlo qui: http://userscripts.org/scripts/show/68609

Altri suggerimenti

Va bene ho una soluzione di lavoro, il reverse engineering dal plugin onePassword. Posso solo immaginare il motivo per cui questo funziona, ho asume è perché di aggiungere l'evento ai elementi di input. Tuttavia cambiare nulla e smette di funzionare (la chiamata redir sul fondo si trova sul fondo per un 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);

Come potete vedere ho usato reindirizzamento. Questo esempio è davvero grezzo btw quindi non basta usare

Si potrebbe provare un processo di reindirizzamento:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top