JavaScript を使用しKeyboardEvent
て、ブラウザーによってネイティブに作成されるものにできるだけ似たものを作成しようとしています (たとえば、キーを押すと、keyDown
イベントが発生します。このイベントに関連付けられたイベント オブジェクトは、私が試みているものです。再現する)。
このcreateEvent
メソッドを使用して、特定のタイプのイベントを作成できます。
var evt = document.createEvent("KeyboardEvent");
次に、このinitKeyboardEvent
メソッドを使用して、イベント オブジェクトをデータで初期化できます。このメソッドのシグネチャは、ブラウザーによって大きく異なるようです。initKeyEvent
代わりにメソッドを使用するFirefoxでこれを機能させました。私の知る限り、WebKit は次の引数を想定しています。
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?
);
キー コードを渡す方法がないようです (keyCode
またはwhich
プロパティで)。WebKit のソースをたどろうとしましたが、役に立ちませんでした。KeyboardEvent
IDL 定義はkeyCode
プロパティ (およびプロパティ)を参照しているように見えますがcharCode
、それがどのように値を取得するかを理解できませんでした。
WebKit ソースからの関連ファイル:
そして、ここに問題を示すためのフィドルがあります。コンソールを開くと、KeyboardEvent
そこにあるはずです。それが合成のものです。keyCode
およびwhich
プロパティの値がどのようになっているかに注目してください0
。「結果」フレームにフォーカスして任意のキーを押すと、ネイティブ イベント オブジェクトを調べて違いを確認できます。
それで、私の質問: WebKitの合成オブジェクトにまたは値を追加することは可能ですか。keyCode
which
KeyboardEvent