2016-05-16 15 views
1

私がやっていることは、特定のウェブサイトでキー "e"が押された後、キー "w"を複数回押した場合です。私は、スクリプトがalert()で "e"を押すポイントにスクリプトが到達するかどうかを調べるテストを行いました。それは機能しましたが、キー "w"をトリガーしません。1つのキーを押したときに別のキーを複数回押しますか?

// @run-at  document-end 
// ==/UserScript== 

(function() { 
var amount = 6; 
var duration = 50; //ms 

var overwriting = function(evt) { 
    if (evt.keyCode === 69) { // KEY_E 
     for (var i = 0; i < amount; ++i) { 
      setTimeout(function() { 
       alert("Key e is pressed"); /* This works */ 
       window.onkeydown({keyCode: 87}); // KEY_W /* This doesn't */ 
       window.onkeyup({keyCode: 87}); 
      }, i * duration); 
     } 
    } 
}; 
window.addEventListener('keydown', overwriting); 
})(); 
+0

可能な重複[JavaScriptでイベントをトリガするには?](http://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript) – Eduardo

答えて

1

レガシーイベントリスナーを直接呼び出しています。実際には実行されます(存在する場合)。ただし、登録されたイベントリスナ(addEventListener())はトリガできません。これを行うには、目的のターゲット(ウィンドウなど)にイベントをトリガーし、ブラウザに何か他の操作を行わせます。

window.dispatchEvent(new KeyboardEvent('keydown', 
{ 
    'view': window, 
    'which': 87, 
    'keyCode': 87, 
    'bubbles': true, 
    'cancelable': true 
}); 
+0

申し訳ありませんが、私はちょっと混乱しています。どうすれば "e"を押すと "w"が複数回トリガーされるように編集できますか? – Intrinza

+0

これは 'window.onkeydown({keyCode:87});'の代わりです。それは寒天除去スクリプトですか? :) –

+0

する必要があります。 50 msが短すぎる可能性があります。私は80ミリ秒を調整しました。 –

関連する問題