2012-12-19 25 views
35

私が欲しいのは、<input>フィールドの入力をシミュレーションすることです。jQueryを使用して入力フィールドの入力をシミュレートする方法は?

私は次のコードを持っている:

var press = jQuery.Event("keydown"); 
press.ctrlKey = false; 
press.which = 65; 
$("#test").trigger(press); 

をしかし、私はページをロードする際、#test入力フィールドには何も入力した文字を持っていない、「65」のキーコードは「A」を表しているが、ない「がありません'入力。

私が欲しいのは、Greasemonkeyを使って自動的にウェブサイトに入力することです。

私にこれを行うために使用できるアイディアやライブラリを教えてください。
ありがとうございました!

答えて

40

キーイベントを送信することができます。それ以外のイベントを受信すると、が入力されますが、入力はに変更されません。たとえば、Aという文字は表示されません。これは主にセキュリティの問題です。それについての議論については"Manually firing events"を参照してください。

したがって、文字を表示するには、キーイベントを送信するときに入力値を変更する必要があります。そのためのjQueryプラグインがあります。"The $.fn.sendkeys Plugin"を参照してください。

<input>がユーザーが適用したキー、キーイベント、およびそのプラグインとthis jsFiddleでどのように反応するかを確認できます。参考のため

、これはそのjsFiddleからのコードの重要な部分です:あなただけの「<input>に入力してシミュレート」しようとしている場合は、プラグインが十分でなければならないこと

$("button").click (function (zEvent) { 
    if (zEvent.target.id == "simA_plain") { 
     console.log ("Send Plain key event"); 
     var keyVal = 65; 
     $("#eventTarg").trigger ({ 
      type: 'keypress', keyCode: keyVal, which: keyVal, charCode: keyVal 
     }); 
    } 
    else { 
     console.log ("Use the Plugin to simulate a keystroke"); 
     $("#eventTarg").sendkeys ("B") ; 
    } 
}); 


。しかし、あなたが本当にがやろうとしているものに応じて、次の一つ以上の操作を行う必要があるかもしれません:

  1. はちょうどあなたがそれになりたいものにテキストを設定します。
  2. ​​イベントを送信します。ページのJavaScriptがそのイベントをトリガーした場合です。
  3. 同様に、ページのjavascriptがそれをトリガーする場合は、changeイベントなどを送信します。
  4. ページのJavaScriptを直接検索して呼び出すだけです。 スクリプトインジェクションロケーションハックunsafeWindow、および/または@grant noneモードを使用してください。
  5. 他に何かありますか?あなたの本当の目的を述べ、目標ページにリンクしてください。
+1

本当に役に立ちます:) – shuboy2014

関連する問題