为了尝试在 Safari 浏览器中模拟键盘事件,使用 JavaScript 测试了两种方法:
方法1:
var event = document.createEvent("KeyboardEvent"); event.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 115, 0);
方法 2:
var event = document.createEvent("UIEvents"); event.initUIEvent("keypress", true, true, window, 1); event.keyCode = 115;
但是,执行任一代码后,事件对象的 keyCode/which 属性仍然设置为 0 ,表示不成功
解决方案:
根据 DOM Keyboard Event Level 3 polyfill,可以采用以下方法:
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})
其他更新:
DOM 键盘事件级别3 polyfill 现在支持旧属性:
var e = new KeyboardEvent("keydown", { bubbles : true, cancelable : true, char : "Q", key : "q", shiftKey : true, keyCode : 81 });
为了跨浏览器兼容性,可以在 polyfill 之外使用以下 initKeyboardEvent 函数:
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; }
请参阅提供的示例和演示进一步说明。
以上是如何使用 JavaScript 模拟 Safari 中的键盘事件?的详细内容。更多信息请关注PHP中文网其他相关文章!