47

我想要的是<input>使用javascript模拟输入字段。

我有以下代码:

var press = jQuery.Event("keydown");
press.ctrlKey = false;
press.which = 65;
$("#test").trigger(press);

但是当我加载页面时,#test输入字段没有输入字符,'65'的键码代表'A',但没有'A'输入。

基本上我想要的是使用 Greasemonkey 自动输入网站。

请给我一些想法或一些我可以用来执行此操作的库。
非常感谢!

4

1 回答 1

53

你可以发送关键事件,任何监听它们的东西都会得到它们,但它们不会改变输入,所以你不会看到字母A出现,例如。这主要是安全问题;有关该问题的讨论,请参阅“手动触发事件” 。

因此,如果您希望字母出现,您必须在发送按键事件时更改输入的值。有一个 jQuery 插件,请参阅$.fn.sendkeys插件”

您可以在这个 jsFiddle<input>中查看 an 如何对用户应用的键、键事件和该插件做出反应。

作为参考,这是来自 jsFiddle 的关键代码:

$("button").click ( function (zEvent) {
    if (zEvent.target.id == "simA_plain") {
        console.log ("Send Plain key event");
        var keyVal = 65;
        $("#eventTarg").trigger ( {
            type: 'keypress', keyCode: keyVal, which: keyVal, charCode: keyVal
        } );
    }
    else {
        console.log ("Use the Plugin to simulate a keystroke");
        $("#eventTarg").sendkeys ("B") ;
    }
} );


如果您只是想“模拟在<input>”上打字,该插件应该就足够了。但是,根据您真正想要做的事情,您可能需要执行以下一项或多项操作:

  1. 只需将文本设置为您想要的。
  2. 发送一个keydown事件,如果页面的 javascript 触发了该事件。
  3. change同样,如果页面的 javascript 触发了该事件,则发送事件等。
  4. 只需找到并直接调用页面的javascript。使用script injectionlocation hackunsafeWindow和/或@grant nonemode 来做到这一点。
  5. 还有什么?陈述您的真实目标并链接到目标页面。
于 2012-12-19T06:09:34.433 回答