【问题标题】:Execute Key Press Event执行按键事件
【发布时间】:2017-09-22 05:46:25
【问题描述】:

我一直在尝试开发一种 POS 解决方案,而打开 Till Drawer 是迄今为止最困难的部分。

目前我正在尝试通过组合键来执行此操作。即CTRL+SHIFT+p。我需要做的是在调用某个函数时执行这些键。我已经构建了系统,并且功能已经准备好等待。

我正在使用自动热键将这些键映射到打开抽屉的 exe。如果我按下键盘上的键,这将非常好。但不是让用户按下这些键,我想自动执行它们。我已经搜索了很多,许多解决方案都在监听是否按下了一个键,然后做出相应的反应。

我发现让我稍微前进的当前代码如下(根据我的理解,这模拟了 CTRL+SHITF+p 的按下):

e = jQuery.Event("keypress")
    e.which = 80; //choose the one you want
    e.ctrlKey = true;
    e.shiftKey = true;
    $("#pos-paid").keypress(function(){alert('keypress triggered')}).trigger(e)

这确实提醒我该键已被按下。 Jquery 绝对不是我的强项,如果函数是废话,请见谅。

我正在使用 Chrome,并且了解需要考虑的安全问题。有人说这是不可能的,有人说这是可能的。

有人可以告诉我这是否可以实现,如果可以的话,有人可以指出我如何实现这一目标或一些类似问题/文档的正确方向吗?

备注 我目前已尝试创建扩展程序,但在访问本地文件时遇到问题。

我尝试创建一个与应用程序通信的扩展程序,但也遇到了问题。

我想避免任何需要联网的解决方案。

我拥有将访问该站点的客户端计算机,因此可以准备并添加任何必要的软件来实现此目的。

这是我对这个问题的另外两个问题。

Communicate with Cash Drawer from Website

Access Local Files using a Google Chrome Extension

【问题讨论】:

  • 为什么必须按下键而不是触发键的事件?
  • 你的意思是我为什么不让 Javascript 来打开收银台?如果是这样,问题是网页是外部的,而 exe 是内部的。因此我需要在客户端机器上执行 exe。
  • 网页是“外部”但它可以向客户端发送击键?
  • @JustinPaulson 我听说 Chrome 沙箱会停止命令,所以我现在使用没有沙箱的 chrome,按下键时 exe 仍然没有启动,好吧,当上面的代码就是这样用的。

标签: javascript jquery


【解决方案1】:

如果您从内容脚本执行KeyboardEvent,应该没有问题。 jQuery 代码将不起作用。

这是一个触发 CTRL + SHIFT + p 'keydown' 事件的函数。 Chrome 在这方面也有问题,需要一个 pollyfill 才能使其工作:

var event_object = document.getElementById('pos-paid');

function emitKeyEvent() {

    //    This function triggers the event
    var keyEvent = new KeyboardEvent("keypress", {key : "p", char : "p", ctrlKey: true, shiftKey: true});
    event_object.dispatchEvent(keyEvent);
}

event_object.addEventListener('keypress', function(e){

    //    This function listens to the event
    console.log(event, 'ctrlKey: ' + e.ctrlKey, 'shiftKey: '+ e.shiftKey, e.char, e.key);
    alert('CTRL + SHIFT + p pressed')

    e.preventDefault();

});

//    Just trigger CTRL + SHIFT + p with emitKeyEvent();
emitKeyEvent();

你可以在这里测试它:http://jsfiddle.net/u3gdQ/

【讨论】:

  • 如果我更改它以删除移位,例如,它只是 CTRL+p,大概这应该会弹出打印对话框?我确实尝试过,但没有任何结果。
  • 嗯,这个事件是由它的文档上下文触发的。您需要由 chrome 上下文触发它......一个浏览器中有更多“文档”
  • 是否可以在全局层面触发,即关闭沙箱等
  • 如果我这样模拟CTRL+A,是不是应该选择元素的文本?尽管警报正确出现,但它没有这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
相关资源
最近更新 更多