【问题标题】:How to simulate keypress in JS? [duplicate]如何在JS中模拟按键? [复制]
【发布时间】:2018-02-21 23:08:16
【问题描述】:

我正在尝试创建一个 chrome 扩展来修改流行的浏览器游戏 Agar.io 的控件。快速总结一下,在游戏中 SPACE 执行分裂动作。我想执行相同的操作,但按 D 而不是 SPACE。扩展工作正常。它检测到 D 被按下并调用了我的 split() 函数;我知道这是因为警报弹出但实际的游戏动作没有执行。我环顾四周并尝试了不同的方法,但没有任何效果。下面是我的 JS 文件。

window.addEventListener('keydown', keydown);

function keydown(event) {
    if (event.keyCode == 68) { //key D
        split();
    }
}

function split() {
    $("body").trigger($.Event("keydown", { keyCode: 32}));
    $("body").trigger($.Event("keyup", { keyCode: 32}));
    alert("Did it work?");
}

也试过这个方法,没有成功:

var space = jQuery.Event("keydown");
space.which = 32;
$("body").trigger(space);

如本题[Definitive way to trigger keypress events with jQuery

]1

【问题讨论】:

  • @Dekel 我已经尝试过您引用的问题中显示的方法。它没有用,这就是我发布新问题的原因。
  • 尝试在split(); 之后添加event.stopPropagation();
  • stopPropagation();没用,但谢谢。
  • 我认为您需要查看内容脚本。基本上你想在页面上下文中模拟 D 键的按下 - 这是Agar.io,而不是在你的扩展上下文中。
  • 对 addEventListener 的 useCapture parameter 使用 true:document.addEventListener("keydown", handler, true);并将您的内容脚本声明为“run_at”:“document_start”,不要忘记重新加载扩展。

标签: javascript jquery google-chrome-extension


【解决方案1】:

我能够解决问题。代码本身是正确且功能正常的,但问题在于我设置 chrome 扩展的方式。应用在这里找到的解决方案https://stackoverflow.com/a/9517879/4651794 我能够让代码运行。不确定这个问题是否有任何优点,因为我认为问题出在关键命令上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2020-10-28
    • 1970-01-01
    • 2015-01-07
    • 2011-08-02
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多