所以我正在做的是当在某个网站上按下“e”键时,它会多次按下“w”键。我做了测试,看看脚本是否达到了按下“e”并带有alert()的程度;并且它有效,但它不会触发关键字“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 :(得分:1)
您正在直接调用旧事件侦听器。实际上它会被执行,如果存在的话。但是,这不能触发已注册的事件侦听器(addEventListener()
)。为此,请将事件触发到所需目标(例如窗口),然后让浏览器执行任何其他操作。
window.dispatchEvent(new KeyboardEvent('keydown',
{
'view': window,
'which': 87,
'keyCode': 87,
'bubbles': true,
'cancelable': true
});