47

私が望むのは、<input>javascript を使用してフィールドでの入力をシミュレートすることです。

次のコードがあります。

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

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

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

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

4

1 に答える 1

53

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

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

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

参考までに、これは 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. 同様に、changeページの JavaScript がトリガーされた場合は、イベントなどを送信します。
  4. ページの JavaScript を見つけて直接呼び出すだけです。これを行うには、スクリプト インジェクションロケーション ハックunsafeWindowおよび/または@grant noneモードを使用します。
  5. 他の何か?あなたの本当の目的を述べ、ターゲット ページへのリンクを設定します。
于 2012-12-19T06:09:34.433 に答える