所以(只是以“so”开头)我想为qwebirc平台创建一个greasemonkey脚本。我需要根据发生的一些事件自动发送回复。对于那些不知道的人,一旦登录qwebirc,屏幕底部就会有一个输入文本字段,您可以在其中写下您的回复,然后按回车键将回复发送到服务器。输入字段包含在表单元素中,但表单没有提交按钮。
我可以通过写入“value”属性来填充输入字段(没问题),但我发现无法将回复“提交”到服务器。我尝试在容器表单元素上调用.submit()方法,但这只是重新加载页面(因此它发送给自己 - 这是有道理的,因为表单元素上没有“action”属性)。在我看来,唯一的解释是,一旦在输入字段中按下回车键,就会在qwebirc.js上的某个地方调用一个方法。
我找不到负责这个动作的代码(虽然我在Chrome中工作过,但是我在键盘上设置了一个事件监听器断点 - 输入,当我按下回车键并指向我的时候就停止了我某些功能)因为脚本被缩小了,我无法知道那些“m”,“n”,“p”,“t”等意思。如果我有未压缩的版本,我可以扫描它,也许,找到它。我也试过下载qwebirc项目,但是那里有很多文件 - 而在服务器上我正在尝试编写greasemonkey脚本,只有一个脚本。
这里的主要想法是,我猜输入键按下模拟应该触发发送功能 - 无论在哪里,无论哪个。
为了做到这一点,我在stackoverflow上发现了一些关于同一主题的问题 - 按下回车键的模拟。我试过那段代码:
function simulate() {
var evt = document.createEvent('KeyboardEvent'),
input = document.querySelector('.keyboard-input');
evt.initKeyboardEvent(
'keydown',
true,
true,
window,
false,
false,
false,
false,
13,
0
);
input.dispatchEvent(evt);
}
事件已创建(我可以在FireBug的DOM面板中看到它),但不会采取任何操作。我的意思是为什么.dispatchEvent()的行为与真正的输入键不一样?
提前致谢。
答案 0 :(得分:0)
出于本答案的目的,我将假设消息输入伪表格与其他人一样 - 即消息可以通过发送按Enter 或点击发送按钮。
你尝试过前者;它不起作用。页面可能正在等待单击“发送”按钮(可能由Enter按键触发(尽管不是,我不知道为什么您的事件不起作用 - 我不熟悉事件的复杂性))。相反,那就试试吧。另外,take note:IE使用fireEvent
而不是dispatchEvent
- 所以如果你在IE中,这可能就是问题。
点击发送按钮点击:
var e = document.createEvent("MouseEvents");
e.initEvent("click", true, true);
e.target = "button#send";
if(document.fireEvent) {
document.fireEvent(e);
}
else {
document.dispatchEvent(e);
}
将分配给e.target
的字符串更改为唯一标识“发送”按钮的CSS选择器。