10

J'écris une extension Chrome qui lance un script avec un raccourci clavier. Cela fonctionne très bien sur la plupart des pages, mais je me suis rendu compte que sur Gmail, ce n'est pas le cas: il semble que tous les événements de clavier sont capturés par Gmail et ne sont pas propulsés à ma fonction.Gmail semble capturer tous les événements de clavier. Un moyen de contourner cela?

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 variantes de window.addEventListener et d'autres types d'événements en vain.

Est-ce que quelqu'un connaît un moyen de contourner cela? J'ai essayé de voir si le script GreaseMonkey pouvait le faire, ça m'a amené ici: http://code.google.com/p/gmail-greasemonkey/ mais ça ne m'a pas aidé.

Merci!

+0

Vous pouvez demander à tous vos utilisateurs de désactiver les raccourcis clavier dans leurs paramètres Gmail. Mais ils pourraient ne pas aimer ça. Et je ne suis pas sûr que ça marcherait de toute façon. – MatrixFrog

+1

Non, ce n'est pas vraiment faisable. Mon poste ne fonctionne pas très honnêtement, alors je ne peux imaginer que quelqu'un fasse ce compromis. D'ailleurs, je suis le seul utilisateur en ce moment, donc je ne voudrais pas que ça soit :) –

Répondre

1

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

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

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

+0

Merci, je vais jeter un oeil et essayer d'obtenir ce dont j'ai besoin. Je vais mettre à jour si je le fais. –

+4

Ok, je l'ai compris. Il s'avère que ce n'était pas vraiment lié à Gmail de capturer l'événement et de le garder pour lui-même: il y a un paramètre d'extensions Chrome qui fait correspondre le script à toutes les images ou seulement au premier. Il ne prend par défaut que le premier, et Gmail utilise les iframes. Donc mon script n'était pas chargé là où il le fallait. (http://code.google.com/chrome/extensions/content_scripts.html) Merci pour l'exemple de travail, cela m'a aidé à creuser davantage. –

+0

Super! ... et bonne chance! –

0

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

'document.body.onkeypress' renvoie null bien. Quelle différence font les deux méthodes? En cas de doute, j'ai essayé de faire 'document.body.onkeypress = function() {alert ('sdf');}' ainsi que 'window.onkeypress' sans meilleurs résultats. –

1

Okay J'ai une solution de travail, réorganisée à partir du plugin onePassword. Je ne peux que deviner pourquoi cela fonctionne, je suppose que 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 alors ne l'utilisez pas simplement

+0

Vous pourriez jeter un oeil à ce que j'ai fini par faire: https://github.com/Timothee/LogMeOutThx/blob /master/Chrome%20extension/content_script.js (note: c'est encore en cours ;-)) Je n'ai pas besoin de faire de redirection. La principale chose qui manquait pour moi était dans le manifeste: https://github.com/Timothee/LogMeOutThx/blob/master/Chrome%20extension/manifest.json et en ajoutant "all_frames": true –

+0

Oublié de mentionner, j'ai aussi dû ajouter all_frames. Merci pour les liens – Thomas

Questions connexes