我们可以使用websockets发送远程密钥事件吗?

时间:2012-08-12 09:54:32

标签: websocket socket.io

我可以使用websockets在浏览器之间模拟键盘吗? 我希望模拟箭头键和F11。

2 个答案:

答案 0 :(得分:4)

关键事件已在浏览器中提供多年

请参阅 http://www.quirksmode.org/dom/events/keys.html获取支持列表

在这里处理jQuery中的关键事件 Is it possible to simulate key press events programmatically?

Websockets是一种新技术,并非在所有浏览器中都可用,但您可以使用模拟Web套接字的库(如果需要在Socket.io等旧版浏览器上进行双向实时消息传递)。

http://socket.io/

客户端上的伪代码看起来像这样:

(function ($) {
    function simulateKeyPress(character) {
      jQuery.event.trigger({ type : 'keypress', which : character.charCodeAt(0) });
    }

    function onkeypress(key, ts) {
       var act = {"timestamp" : ts, "key" : key};
       socketIoClient.emit("message", act);
    }

    $('body').keypress(function(e) {
       // Send date in case you want to order/buffer on the server
      onkeypress(e.which, new Date());
    });

    var socketIoClient = io.connect(null, {
       'port': '#socketIoPort#'
        , 'rememberTransport': true
        , 'transports': ['websocket', 'xhr-polling'] // put here all the transports you need
    });

    // Handle the key press events
    socketIoClient.on('message', function(json) {
      var act = JSON.parse(json);
      if (act) {
      // Not sure what the keys will do but if you just want to echo them
       simulateKeyPress(act.key);
     }
    });
})(jQuery);

希望这有帮助

答案 1 :(得分:0)

当然可以!

  1. 打开与Websocket服务器的连接,并在每个jQuery keyUp-Event上向它发送请求!
  2. 在websocket端,只需将Event throw传递给您的其他浏览器连接。
  3. 在另一个浏览器上,只需模拟KeyPress simulateKeyPress(e);