这是my original question,被@rsanchez和@Xan非常友善地带到this question。我本来希望进一步询问他们为我提供的链接,但我没有足够的声誉来发表评论,所以我不得不在这里提出新的问题。
所以我的问题是我正在开发一个chrome扩展程序,我希望使用Pusher从我的服务器获取消息,并且在此消息到达时,我想打开相应的聊天并将消息发送给我从服务器收到ID为messageInput
的textarea,并触发页面脚本中定义的keypress
事件。
我现在明白做了
var $message = $("#messageInput");
var e = $.Event("keypress", {keyCode: 13}); //keypress defined for enter
$message.text(myMessage);
$message.trigger(e);
赢了,因为它并没有真正调用页面脚本的真实keypress
事件。
因为我使用的是推送模块,所以我不想使用注入方法,因为根据我的理解,它不可能将消息从我的内容脚本传递到注入的脚本。 / p>
所以我想使用@rsanchez和@Xan指出的问题所建议的KeyboardEvent
方法。所以我先在控制台中尝试了它,但只看到了返回值" true"没有任何事件发生。那么我该如何在代码中实现以下内容呢?
content_script.js
...
channel.bind('returned_message', function(data) {
// returned_message is the message from server
var $message = $("#messageInput");
var e = $.Event("keypress", {keyCode: 13});
$message.text(data.message);
console.log($message.text());
$message.trigger(e);
});
这里是我应该实现的,而不是$.Event
:
var e = new KeyboardEvent('keypress');
e.code = 13;
document.querySelector("#messageInput").dispatchEvent(e);
提前谢谢。
这是我在网页原生剧本中找到的代码的摘录:
...
$msgInput.keypress(function(e) {
if(e.keyCode == 13 && !e.shiftKey) {
var msg = $msgInput.val().trim();
if(msg.length > 0) {
sendMsg(msg);
$msgInput.val('');
}
e.preventDefault();
}
});
...
在脚本开头$msgInput
定义为$msgInput = $("#messageInput")
。