2012-05-10 17 views
4

私はfirefox-addonからのキーストロークをシミュレートできるようにしたいが、現時点ではそれができない。firefoxアドオンのキーストロークをシミュレート

私はこの投稿を見つけましたWhy simulation of Left Arrow + Shift keys doesnt work in Firefox?と私のコードはほぼ同じですが、それはフォーカス部分だけで、dispatchEventではありません。なぜこのことが起こっているのでしょうか?ここで

はコードです:

objTag.focus(); 
var e = document.createEvent('KeyboardEvent'); 
e.initKeyEvent('keydown', true, true, window, false, false, false, false, 35, 0); 
objTag.dispatchEvent(e); 
+0

あなたは正しくA'を送信しますkeydown'イベント(終了キー)をいくつかの要素に追加します。多分あなたはあなたが見たいと思われる効果を説明するべきでしょうか?また、objTagが実際にオブジェクト(Flashなどを意味する)である場合、プラグインにはブラウザとは独立した独自のイベント処理があり、ブラウザによって生成されたイベントは受け取りません。 –

+0

私のアドオンは、テキストエリアの最後に余分なテキストを挿入します。 ENDキーとSPACEキーをシミュレートしたかったのです。 objtagはtextarea要素です。それは焦点を当てているが、それはラインの終わりには行かない。 –

答えて

2

あなたのコードが正しいですが、<textarea>要素がkeypressイベントではなく、​​に反応します。

とにかく、なぜこんなに複雑なのですか? input.valueと設定してから、input.setSelectionRange() methodを使用してカーソルを適切に移動できます。あなたは、現在の行の最後に何かを追加したい場合は、このようにそれを行うだろう:テキストの末尾に追加

var position = objTag.selectionStart; 
var lineEnd = objTag.value.indexOf("\n", position); 
if (lineEnd < 0) // No more line breaks 
    lineEnd = objTag.value.length; 

var textToAdd = "foo"; 
objTag.value = objTag.value.substr(0, lineEnd) + textToAdd + objTag.value.substr(lineEnd); 
objTag.setSelectionRange(lineEnd + textToAdd.length, lineEnd + textToAdd.length); 
objTag.focus(); 

がさらに簡単です:

var textToAdd = "foo"; 
objTag.value += textToAdd; 
objTag.setSelectionRange(objTag.value.length, objTag.value.length); 
objTag.focus(); 
+0

こんにちは。あなたの応答に感謝します。私はこれを試みたが、それは私が望むものを正確にしていない。たぶん私は自分自身をより良く説明できたかもしれない。私はもう少しの情報で質問を更新します –

+0

実際には、キーストロークはキーストロークでうまくいきましたが、私の問題をすべて解決するわけではありません。キーボードの同じキー。このサイトには、スペース、バックスペース、終了などを押したときに自動補完リストをトリガーする入力要素がありますが、この解決策でその動作を複製することはできません。 –

+0

@fsilva:そして、キーごとに 'keydown'、' keypress'、 'keyup'を送信したいと思うかもしれません - それはユーザの入力を適切にシミュレートする方法です。 –