-1

JavaScript で簡単な Greasemonkey スクリプトを開発しようとしました。各クリック間の間隔で特定のボタンのクリックを自動的にシミュレートするにはどうすればよいですか?

これが私のコードです:

var Next=document.getElementsByClassName("SubmitButton");

for (var i=0, c = Next.length; i<c; i++)
{
    Next[i].click();
    setTimeout('Next[i].click()',3000);
}

問題は、コードが の最初の値だけをクリックすることですNext。なんで?

4

2 に答える 2

1

問題は次のとおりです。

  1. 自動評価文字列は、Greasemonkey では適切に機能しません(いずれにしても回避する必要があります)。に関数を渡しますsetTimeout()。これは機能します。パラメータの処理方法に注意してください

    var Next = document.getElementsByClassName ("SubmitButton");
    
    for (var i=0, c = Next.length; i<c; i++) {
        Next[i].click();
        setTimeout (function (J) {Next[J].click(); }, 3000, i);
    }
    
  2. 間隔が必要なようで、この質問にsetinterval2 回マークを付けました。しかし、コードは を使用しておりsetTimeout、これは 3 秒ごとではなく 1 回だけ起動します。おそらくあなたは使いたいsetintervalですか?

        setinterval (function (J) {Next[J].click(); }, 3000, i);
    
  3. これは送信ボタンをクリックしているようです。新しいページをロードしていますか。またはAJAXをトリガーしますか?その場合、このスキームは 1 回か 2 回しか発火しない可能性があります。
    ターゲット ページにリンクし、その動作をより適切に説明します。

于 2012-08-13T08:57:08.700 に答える
1

問題は、すべてのアクションのタイムアウトを同時に設定しているため、すべてが同時に実行されることです。

また、ループが完了した後に実行されるコードで変数を使用しているiため、配列の最後の項目の後のインデックスを指します。

クロージャーを使用してアイテムごとに個別の変数を作成し、文字列の代わりに無名関数を使用して、タイムアウト時にコードを実行します。

var Next = document.getElementsByClassName("SubmitButton");

for (var i = 0, c = Next.length; i < c; i++) {

//Next[i].click();

  (function(element, time){

    setTimeout(function(){ element.click(); }, time);

  })(Next[i], 3000 * i);

}
于 2012-08-13T08:29:17.953 に答える