Tir d'un événement de clavier sur Chrome
Je suis en train de déclencher un événement de clavier à une page à l'aide de javascript sur le navigateur Chrome.
J'ai eu une approche qui permet de travailler sur Firefox:
pressKey = function(key, shift) {
var evt = document.createEvent('KeyboardEvent');
evt.initKeyEvent("keypress", false, true, null, false, false,
shift, false, keyCode(key), key.charCodeAt(0));
document.dispatchEvent(evt);
}
où la clé est la clé souhaitée et de mot de code des changements minuscules dans highercase et appelle aussi charCodeAt().
Mon problème est que les événements sur Safari/Chrome n'ont pas initKeyEvent, mais initKeyboardEvent. La principale différence que j'ai pu remarquer c'est que vous avez à passer la clé comme un keyIdentifier (qui ressemble à un caractère unicode) au lieu de passer le code et le keychar. Néanmoins, je n'ai pas réussi à le faire fonctionner.
J'ai aussi essayé le JQuery approche décrite ici sans succès.
EDIT:
J'ai débogué cela un peu plus loin, et il semble que l'événement Chrome ne déclencher les auditeurs, mais keyCode/charCode est toujours 0. J'ai essayé de mettre evt.mot de code ou evt.charCode, sans succès non plus.
- J'ai supprimé un commentaire à partir de la question et a mis comme réponse, parce que je pense que même pensé qu'il n'a pas vraiment de résoudre la question, il peut être vraiment utile pour les personnes ayant le même problème que moi.
- Hey comment avez-vous résolu le problème? Je suis également confrontés à la question de la simulation en pressant sur les touches de gauche et de droite de google chrome/safari. Mais sans succès, comment avez-vous fait?
- Avez-vous essayé la solution que j'ai posté? Il a travaillé pour moi et serait probablement vous ont aidé à atteindre votre objectif, donc c'est bizarre pour moi que vous avez accepté votre propre réponse "c'est un bug".
Vous devez vous connecter pour publier un commentaire.
Je veux juste jeter cette base d'extrait de là-bas. Il fonctionne dans Chrome et est basé sur le hack mentionné par Paul Irish.
Il utilise charCode au lieu de mot de code (ce qui peut être utile dans certains cas), mais de s'adapter à mot de code si vous s'il vous plaît.
J'ai suivi une bug sur Webkit où créé des événements contiennent uniquement KeyIdentifier mais aucun mot de code n'/charCode comme on peut le voir sur la navigateur de code source. Il semble y avoir un patch passe de résoudre ce problème. Donc je suppose que ce n'est pas une bonne question... plus
Si vous voulez faire de la bonne façon, vous pouvez utiliser DOM Clavier Événement de Niveau 4 KeyboardEvent construire et clé propriété.
Dans les navigateurs les plus récents ou avec DOM Clavier Événement de Niveau 3/4 polyfill vous pouvez faire quelque chose comme ceci:
Exemple
"la carte de l'événement.la clé de valeurs de caractère normal d'une QUERTY (fr-fr) présentation de proposition de la démo
Noter que keyCode et charCode sont désapprouvées dans la dernière Spec (www.w3.org/TR/DOM-Level-3-Events/). De sorte que le est aucune chance de Chrome pour mettre en œuvre initKeyEvent avec keyCode de soutien. Mais vous pouvez toujours remplacer cette valeur:
Mise à JOUR: mauvaise méthode:
Ou vous pouvez mise à jour événement prototype: mise à JOUR: mauvaise méthode:
Mise à jour
Il existe différents de mise en œuvre de initKeyboardEvent. Dans mon KeyboardEvent polyfill je le détecter en quelque sorte comme ceci (gist):
keyCode
propriété n'est pas configurable. Le second parce que le descripteur de propriété duget
est jamais appelé.En fonction de vos besoins, un TextEvent pourrait fonctionner. (Il a travaillé pour moi pour mes besoins - pour chrome. Ce n'est pas cross-navigateur testé, mais alors, la question est précisément à propos de google chrome.)
Vous pouvez travailler autour de la Webkit bug à l'aide de
createEvent('Event')
plutôt quecreateEvent('KeyboardEvent')
, puis en attribuant lakeyCode
de la propriété. Voir cette réponse et cet exemple.