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 のソースをたどろうとしましたが、役に立ちませんでした。KeyboardEventIDL 定義はkeyCodeプロパティ (およびプロパティ)を参照しているように見えますがcharCode、それがどのように値を取得するかを理解できませんでした。
WebKit ソースからの関連ファイル:
そして、ここに問題を示すためのフィドルがあります。コンソールを開くと、KeyboardEventそこにあるはずです。それが合成のものです。keyCodeおよびwhichプロパティの値がどのようになっているかに注目してください0。「結果」フレームにフォーカスして任意のキーを押すと、ネイティブ イベント オブジェクトを調べて違いを確認できます。
それで、私の質問: WebKitの合成オブジェクトにまたは値を追加することは可能ですか。keyCodewhichKeyboardEvent