Question

J'écris une extension Chrome qui lance un script avec un raccourci clavier. Il fonctionne très bien sur la plupart des pages, mais j'ai réalisé que sur Gmail, il ne fait pas:. Il semble que tous les événements de clavier sont capturés par Gmail et ne sont pas barboter jusqu'à ma fonction

J'ai un script de contenu (en extension Chrome est ajouté à cette page si vous voulez) qui a (simplifié bien sûr):

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

Mais en réalité, Gmail ne me laisse pas tomber. Je sais que le script est chargé. J'ai essayé différentes variations de window.addEventListener et d'autres types d'événements sans résultat.

Quelqu'un sait-il d'un moyen de contourner cela? J'ai essayé de voir si le script Greasemonkey pouvait le faire, qui m'a amené ici: http: // code. google.com/p/gmail-greasemonkey/ mais cela ne m'a pas aidé.

Merci!

Était-ce utile?

La solution

Je ne sais pas le fonctionnement interne de la capture des événements du clavier de GMail, mais je l'ai écrit récemment un navigateur simple raccourci clavier (donc je n'ai pas utiliser la souris pour cliquer sur les liens) pour Chrome.

Il est pas une extension, mais un script utilisateur / Greasemonkey, mais il est déclenché en tapant une virgule (,) deux fois, et cela fonctionne dans GMail.

Peut-être que ça va vous aider à regarder la source. Vous pouvez le télécharger ici: http://userscripts.org/scripts/show/68609

Autres conseils

Bon j'ai une solution de travail, reverse engineering à partir du module onePassword. Je ne peux que deviner pourquoi cela fonctionne, j'Asume c'est à cause de l'ajout de l'événement aux éléments d'entrée. Cependant rien changer et il cesse de fonctionner (l'appel redir sur le fond est sur le fond pour une raison)

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);

Comme vous pouvez le voir je redirection. Cet exemple est vraiment brut BTW alors ne pas simplement utiliser

Vous pouvez essayer un processus de redirection:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top