2016-05-16 232 views
1

所以我在做什麼時,在某個網站上按下鍵「e」,然後多次按下鍵「w」。我做了測試,看腳本是否達到了用alert()按下「e」的地步。它的工作,但它不會觸發關鍵「W」。當按下一個鍵時,多次按下不同的按鍵?

// @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毫秒可能太短。我調整了80毫秒。 –