Est-il possible de simuler les événements de touche par programmation en JavaScript ?
Réponses
Trop de publicités?Ce que vous pouvez faire est de déclencher par programmation keyevent auditeurs par des tirs de keyevents. Il est logique de permettre à ce à partir d'un sandbox de sécurité de point de vue. L'utilisation de cette capacité, vous pouvez ensuite appliquer un typique de l'observateur modèle. On pourrait appeler cela de la méthode de la "simulation".
Mais récemment, il n'y a pas de [DOM] de façon à déclencher des keyevents de quitter le navigateur-bac à sable. Et de tous les principaux fournisseurs de navigateur va s'en tenir au concept de sécurité.
Comme pour les plugins tel qu'Adobe Flash, qui sont fondés sur l'NPAPI-, et permis de contourner la sandbox: ce sont phasing-out ; Firefox.
Explication Détaillée:
Vous ne pouvez pas et vous ne devez pas pour des raisons de sécurité (comme Pekka déjà souligné). Vous aurez toujours besoin d'un utilisateur de l'interaction entre les deux. En outre imaginer la chance de les éditeurs de navigateurs obtenir poursuivi par les utilisateurs, comme les différents programmatique clavier événements ont conduit à des attaques par usurpation.
Voir ce post pour les alternatives et plus de détails. Il y a toujours le flash en fonction copier-coller. Voici un élégant exemple. En même temps, il est un témoignage pourquoi le web est en mouvement loin de plugin fournisseurs.
Il est similaire de sécurité de l'état d'esprit appliqué dans le cas de l' opt-in de la SCRO de la politique d'accès à distance le contenu de la programmation.
La réponse est:
Il n'y a aucun moyen de le déclencher par programmation des touches d'entrée dans la sandbox du navigateur de l'environnement dans des circonstances normales.
La ligne de fond: je ne dis pas qu'il ne sera pas possible dans l'avenir, en vertu de navigateur spécial-modes et/ou de privilèges vers l'objectif final du jeu, ou toute autre expérience. Toutefois, avant d'entrer dans ces modes, l'utilisateur sera demandé pour les autorisations et les risques, similaire à l' API Fullscreen modèle.
Utile: Dans le cadre de codes de touche, cet outil et de mot de code de cartographie va venir dans maniable.
Divulgation: La réponse est basée sur la réponse ici.
Vous pouvez utiliser `` :
Je n’a pas tester cela, mais il est adapté à partir du code sur la documentation de dispatchEvent (). Vous aurez probablement envie de lire grâce à qui et aussi les docs pour createEvent() et initKeyEvent().
La construction de la réponse de alex2k8, voici une version révisée qui fonctionne dans tous les navigateurs que jQuery prend en charge (le problème a été en manque d'arguments pour jQuery.de l'événement.déclencheur, ce qui est facile d'oublier lors de l'utilisation de cette fonction interne).
// jQuery plugin. Called on a jQuery object, not directly.
jQuery.fn.simulateKeyPress = function (character) {
// Internally calls jQuery.event.trigger
// with arguments (Event, data, elem). That last arguments is very important!
jQuery(this).trigger({ type: 'keypress', which: character.charCodeAt(0) });
};
jQuery(document).ready(function ($) {
// Bind event handler
$('body').keypress(function (e) {
alert(String.fromCharCode(e.which));
console.log(e);
});
// Simulate the key press
$('body').simulateKeyPress('x');
});
On pourrait même pousser plus loin et de laisser non seulement de simuler l'événement, mais l'insertion du personnage (si c'est un élément d'entrée), cependant il y a beaucoup de croix-navigateur gotcha lorsque vous tentez de le faire. Mieux utiliser une version plus élaborée plugin comme SendKeys.