我试图通过JavaScript创建一个KeyboardEvent
,它尽可能地与浏览器本身创建的一个keyDown
(例如,当我按下一个键时,var evt = document.createEvent("KeyboardEvent");
事件会触发。与此事件关联的事件对象是我正在尝试重现的事件。
createEvent
method 可用于创建特定类型的事件:
initKeyEvent
然后,initKeyboardEvent
method可用于使用一些数据初始化事件对象。这种方法的签名似乎在浏览器之间变化很大。我在Firefox中使用了这个,它使用了evt.initKeyboardEvent(
"keydown", // The name of the event
true, // Whether it bubbles
true, // Whether it can be cancelled
window, // The `window` in which it is being fired
"U+004A", // The "key identifier" (this is an uppercase "J")
0, // The "key location" (0 for the normal character keys)
false, // Whether the Control key was held
false, // Whether the Alt key was held
false, // Whether the Shift key was held
false, // Whether a meta key was held
false // Whether the "Alt Graph" key was held?
);
方法。据我所知,WebKit需要以下参数:
keyCode
似乎没有办法传递密钥代码(在which
或keyCode
属性中)。我试图关注WebKit源代码,但这并没有帮助。 KeyboardEvent
IDL definition似乎引用了charCode
属性(以及KeyboardEvent
属性),但我无法弄清楚它是如何获得值的。
来自WebKit源的相关文件:
这是一个fiddle to demonstrate the issue。打开控制台,keyCode
应该在那里进行检查。这是合成的。请注意which
和0
属性的值keyCode
。如果您关注“结果”框并按任意键,则可以检查本机事件对象以查看差异。
所以,我的问题:是否可以在WebKit中向合成which
对象添加KeyboardEvent
或{{1}}值,如果是,我该怎么做呢吗