web-dev-qa-db-ja.com

jQueryを使用して入力フィールドの入力をシミュレートするにはどうすればよいですか?

私が望むのは、<input>フィールドはJavaScriptを使用します。

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

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

しかし、ページをロードすると、#test入力フィールドには入力された文字がありません。「65」のキーコードは「A」を表しますが、「A」の入力はありません。

基本的に私が欲しいのは、Greasemonkeyを使用してWebサイトに自動的に入力することです。

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

39
user1422652

キーイベントを送信することができ、それらをリッスンしているものはすべてそれらを取得しますが、入力を変更しないため、文字Aは表示されません、 例えば。これはほとんどセキュリティ上の問題です。 "手動でイベントを発生させる" を参照してください。

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

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

参考までに、これはそのjsFiddleの主要なコードです。

$("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") ;
    }
} );


<input>で入力をシミュレートする」だけの場合、そのプラグインで十分です。ただし、あなたが何をしようとしているかによって本当に何をしようとしているかによって、次の1つ以上を実行する必要があります。

  1. テキストを希望どおりに設定するだけです。
  2. keydownイベントを送信します(ページのjavascriptがトリガーする場合)。
  3. 同様に、ページのjavascriptがトリガーする場合は、changeイベントなどを送信します。
  4. ページのjavascriptを直接見つけて呼び出します。それを行うには、スクリプトインジェクションlocation hackunsafeWindow、および/または@grant noneモードを使用します。
  5. 他に何か?真の目的を述べ、ターゲットページにリンクします。
46
Brock Adams