所以(从“So”开始),我想为qwebirc平台创建一个greasemonkey脚本。我需要根据发生的一些事件自动发送回复。对于那些不知道的人,一旦登录到qwebirc,屏幕底部就会有一个输入文本字段,您可以在其中写入您的回复,然后按enter键将答复发送到服务器。输入字段包含在表单元素中,但表单没有提交按钮。
我可以通过写入输入字段的"value“属性来填充输入字段(没有问题),但我没有找到将答复”提交“到服务器的方法。我试着在容器表单元素上调用.submit()方法,但这只是重新加载页面(所以它要发送到自己--这很有意义,因为表单元素上没有"action“属性)。在我看来,唯一的解释是,一旦enter键在输入字段中按下,就会在qwebirc.js的某个地方调用一个方法。
我找不到负责此操作的代码(虽然我在Chrome中工作过,但我在键盘输入上设置了一个事件侦听器断点,当我按enter键并指向某个函数的开头时,它停止了),因为脚本被缩小了,我无法知道那些"m“、"n”、"p“、"t”等是什么意思。如果我有未压缩版本,我可以扫描它,也许,找到它。我也尝试下载qwebirc项目,但是那里有很多文件,而在服务器上,我试图编写greasemonkey脚本,只有一个脚本。
这里的主要想法是,我认为enter键按下模拟应该触发发送功能--无论是在哪里,无论是哪一个。
为了做到这一点,我在堆栈溢出上发现了一些相同主题的问题--输入按键的模拟。我试过那个密码:
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()的行为不像一个真正的enter键按下?
提前谢谢。
发布于 2016-01-07 16:39:07
为了回答这个问题,我将假设消息输入伪形式和其他格式一样,即消息可以通过按Enter或单击Send按钮发送。
你试过前者,但没有用。该页面可能正在等待单击“发送”按钮(这可能是由Enter keypress触发的(尽管不是,但我不知道为什么您的事件不工作--我不熟悉事件的复杂性)。相反,那就试试吧。
另外,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选择器。
https://stackoverflow.com/questions/34633480
复制相似问题