Chrome扩展程序触发按键事件

时间:2016-01-26 06:23:40

标签: javascript google-chrome-extension keyboard-events

这是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")

0 个答案:

没有答案