Pour tenter de simuler des événements de clavier dans le navigateur Safari, deux approches ont été testées à l'aide de JavaScript :
Approche 1 :
var event = document.createEvent("KeyboardEvent"); event.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 115, 0);
Approche 2 :
var event = document.createEvent("UIEvents"); event.initUIEvent("keypress", true, true, window, 1); event.keyCode = 115;
Cependant, après l'exécution de l'un ou l'autre code, les propriétés keyCode/which de l'objet événement sont restées définies sur 0, indiquant un échec de la simulation.
Solution :
Selon le polyfill DOM Keyboard Event Level 3, l'approche suivante peut être employé :
element.addEventListener("keydown", function(e){ console.log(e.key, e.char, e.keyCode) }) var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : "Q", char : "Q", shiftKey : true}); element.dispatchEvent(e); // If the legacy "keyCode" property is required: delete e.keyCode; Object.defineProperty(e, "keyCode", {"value" : 666})
Mises à jour supplémentaires :
Le polyfill DOM Keyboard Event Level 3 prend désormais en charge les propriétés héritées :
var e = new KeyboardEvent("keydown", { bubbles : true, cancelable : true, char : "Q", key : "q", shiftKey : true, keyCode : 81 });
Pour les cross- compatibilité du navigateur, la fonction initKeyboardEvent suivante peut être utilisée en dehors du polyfill :
function initKeyboardEvent(type, bubbles, cancelable, view, key, location, modifiers, repeat) { var event = document.createEvent("KeyboardEvent"); event.initKeyboardEvent(type, bubbles, cancelable, view, key, location, modifiers, repeat, false, false, false, false, false, false, 0); return event; }
Référez-vous aux exemples fournis et à la démo pour plus d'illustrations.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!