HTML5可以与扫描仪和信用卡读卡器等外围设备进行通信吗?

我的公司编写安装在客户端机器上的软件来执行销售点交易。 该软件与各种外围设备(收据打印机,条码扫描仪,信用卡读卡器等)连接。 我们通过使用Microsoft OPOS库在Visual Studio中创build的Winforms应用程序来完成此操作,该OPOS库又与我们的云服务器(一个客户端 – 服务器模型)进行通信。

这种模式显然效率低下,主要是更新。 我正在研究通过networking与这些外围设备进行通信的其他方式,最好通过networking浏览器进行通信。 据我所知,Java是唯一可以做我们正在寻找的技术之一(通过小程序),我也假定Adobe Flash也可以(通过Air平台)。 这些都是可行的,但不是可取的,因为我们想要在支持networking的移动设备上运行我们的软件。

有没有人有build议其他方式通过networking与外部设备进行通信?

不是那么简单…还没有,而是一种

所以答案就像生活中的其他事情一样复杂。 如果你想要“简单”的答案,那么是的,不,是的,是的。 容易理解的权利?

2014年11月3日更新:原帖已经过了两年多了,但现在答案基本一致。 但是,我们在几个领域更接近您最初的目标。

更新2016年12月28日:又过了几年,又一次更新。 这一个将比其他任何东西更集中于两个新的发展。 请参阅“完整设备API”下的新“WebUSB和Web BlueTooth”部分。 但答案依然如此。

所以,有很多方法可以解决这个问题,而且我要倒退了。 也就是说,我要从你想要的东西开始,看起来是什么样的,为什么你还不能拥有它。 然后,我会努力工作,为什么你可能不想要它。 但首先,一些背景。

背景

HTML5规范已进入“build议”状态。 这意味着HTML5的外观非常漂亮。 但是,我将以与世界上每个营销人员所决定的方式相同的方式使用HTML5。 也就是说,我不会谈论HTML。 那么,我将尽可能地利用它从HTML页面,但不是真的。 我真正要讨论的是JavaScript(JS), 这是一种不同颜色的马 。 但是,对于所有的意图和目的,我们把这一切都放在与HTML5相同的标题下,HTML5现在已经被定义为“shiny和新鲜”。

此外,我正在讨论的项目将有所不同。 有些是非常依赖于浏览器的项目(比如Chromium的具体实现),还有一些是更多的标准驱动的项目,可能没有浏览器实现或者实验。 我会尽量区分这两者。

完整的设备API

状态:传入,但没有准备好

能够从浏览器访问设备正在缓慢但稳步的进展。 现在,许多现代浏览器都可以访问一些比较常见的设备,例如相机或游戏手柄 ,但都是高级API。 浏览器供应商 , 标准组织以及与networking有关的许多公司都试图使web应用程序与本地应用程序一样强大。

但是您正在寻找的API仍在进行中,并且还有一段路要走。 对于您的具体情况,以及将您的web应用程序连接到大多数设备的更一般情况,距离我们可以使用的东西还有几年的时间。 如果你想看看这个领域出现了什么真棒的东西,这里只是一些选项,可以直接帮助你:

  • networking近场通信(NFC)API
    这个不幸的是现在可能已经死在了水里。 但是看起来W3C最初的一些人(主要是英特尔看起来)正在考虑在networking上增加一个NFC API。
  • 媒体捕获stream
    WebRTC小组正在研究像相机这样的媒体stream的程序化访问,这将允许整合条形码扫描或其他function。 这已达到CR状态, 可在浏览器中使用 ,但对自己的帮助不大。
  • networking蓝牙
    如果你有蓝牙function的工具,这个API将帮助你从能够监听和连接的计算机和设备连接它们。 目前主要的推动力似乎是Chrome团队,包括一个实验性的实现,但我不认为它随时随地都可以使用(请参阅“WebUSB&Web BlueTooth”部分)。
  • WebUSB
    这将允许完全访问低级USB信息,包括列出设备并与之交互。 与Web BlueTooth相同,这似乎是目前的Chrome宠物项目,但我也不会依赖它(请参阅“WebUSB&Web BlueTooth”部分)。
  • networking服务发现
    如果networking上有其他设备或项目广播和使用HTTP,则此API将允许您发现这些服务并与之交互。 没有浏览器的实现,但它在W3C的工作草案。

最初,由于Boot2Gecko(或Firefox OS),Mozilla推动了其中的一些发展。 但是,随着这个项目的正式取消,我们目前在这些领域还没有看到很多的进展。

不过,Chrome团队的成员似乎已经决定跳槽,并开始不仅为这些工作而努力,而是将其投入到浏览器中。 这导致我们…

WebUSB和Web BlueTooth

像香肠一样,最好不要知道Web标准是如何制作的
– 亚伯拉罕·林肯(可能)

在这个领域有一些嗡嗡声,因为它看起来像Chrome团队偷偷在这些实验function,并制定了自己的规范。 太棒了! 只是可能不是你所希望的。

每个浏览器厂商和W3C贡献者小组都有自己的风格,并以自己的方式对规范做出贡献。 结果通常是一个相当不错的规范,浏览器已经同意。 但从一无所有到某事是…凌乱。 真是凌乱。 这是一个很多的过程。 这并不总是导致一个好的规格(是的,我是在谈论你弗洛里安妥协…),但即使这样做,它需要一段时间。

但是,Google似乎都是自己开发这个版本的规范。 而且,根据我的经验,Google对这些规范的处理方式总是有点…呃…把我的个人意见放在一边,我们会说“gung-ho”。 他们倾向于直接进入深层。 而这似乎是他们在这里所做的。

我非常怀疑这些规范或实现在这些标准成为标准时会看起来像这样 。 而且这没有什么错。 这是过程的一部分。 但是我不会依赖这个实现或者开发任何代码或者产品。 这是networking上的一个前所未有的function,所有的浏览器厂商都希望在这方面有一个很大的发言权。

这就是说,这实际上是好的。 谷歌经常做的事情之一(好或坏)是这样的情况是强迫对话,它可以推动事情。 在浏览器中发布一个function,即使是一个实验性function,也可以根据需求调整function。 所以我们很快就会在这方面看到更多的进展。

PhoneGap的 阿帕奇cordova。 你知道,为你的电话

状态:function不全,仅限电话

以前的Adobe PhoneGap是一种用HTML,CSS和JS编写程序的方法,它允许您访问诸如手机之类的低级function,并跨设备进行编译。 这将是实现您的程序的一种方式,但它将是一个电话应用程序,不一定是桌面应用程序。 一个选项来考虑,而我想到的东西我会提到。

cordova已经实现了一些上述function,但没有一些像NFC或蓝牙这样的function更强大的function。

本机应用程序解决scheme(适用于Windows 8)

状态:可能的,但操作系统特定和桌面应用程序

Windows 8提供了在HTML和JS中构build应用程序的function。 这将允许您通过API轻松访问操作系统的低级function。 从外观来看,它非常广泛,你可以做很多事情。 你提到了跨操作系统的支持,但是,这显然限制你到一个操作系统。

它是如此Flash-y!

状态:死/死,不可能作为一个networking应用程序

Flash将不能通过networking直接访问系统。 您可以创build一个AIR应用程序,但是这样做可能会打败基于Web的目的。 另外,手机和networking上的Flash支持似乎正在下滑。

的NodeJS

状态:可能有点痛苦,只能作为桌面应用程序

NodeJS和JS应用程序在过去几年一直是一个热门话题。 我没有在原来的文章中讨论这个问题,因为我觉得它还没有完成。 然而事情已经有所进展,并且已经准备好了这样的事情,并且拥有了不断增长的用户基础的支持和力量。 这就是说,对于你的具体情况,我不会推荐使用它。 在用户机器上必须是本地的,而且由于目前的NodeJS(以及类似的引擎)如何,这将需要大量额外的configuration和设置,这会使事情复杂一点。

所以你可以用NodeJS或者类似的引擎构build一个使用HTML,CSS和JS的应用程序,并且可以低级访问你需要的东西,但是它必须是本地的,并且需要做更多的工作,而不是我想要的当你想要为客户安装它。

…现在我在哪里?

那么,我们在哪里呢? 那么简单:如果你想要一个单一的语言/代码集作为你的代码库,HTML / CSS / JS不是一个好的select。 但他们可能会有一天。 目前,您的select仅限于您觉得最适合您的客户的选项。 Java是你列出的一个稳定的选项,但显然有其自身的缺点。 随着networking的发展,我认为我们会看到新function中出现了很多非常酷的东西,但是我们仍然有一些方法可以解决。

更多阅读:

  • Brian.IO:超越HTML5
  • Windows 8上的HTML5应用程序
  • 维基百科使用JS构build的项目列表

这是可能的,但它必须间接完成。 从理论上讲,你可以用低级语言编写一个socket服务器,从而获得I / O,并通过套接字发送I / O(中继,我猜)。 HTML5使用WebSockets,或者一些等价物与这个套接字服务器进行通信。

现在可以用WebUSB API来实现。

从版本54开始,它在Chrome中可用 。

这是一个W3C编辑的草案,所以我们可以期待(希望)它会被其他浏览器供应商采用…

最近我一直在想这个问题……有一个主要用VB6编写的POS应用程序,考虑接下来要做什么。 HTML5是一个选项,我想我会使用VSPE来获取序列的东西到JS中。

http://www.eterlogic.com/Products.VSPE.html

喜欢这个产品! 在您需要的地方获得串行stream量效果非常好,所以我认为它会起作用,至less可以作为一个概念certificate来让您走。 您将要使用“连接器”types以及“tcpclient”和“tcpserver”的组合。

只是为了logging,一个在2016年运行良好的方法(自Chrome 26以来),但在未来两年内将被撤销的方法是将您的html5作为Chrome应用程序部署,并使用chrome.usb (或chrome.serial或chrome)。蓝牙)。

我目前正在使用chrome.usb并计划使用WebUSB API迁移到一个Web应用程序(请参阅Supersharp的答案),希望在Google停止Chrome应用程序的时候采用这个方法。

有条形码读取的简单方法可以来自input(键盘input消息),如在video中, https://www.youtube.com/watch?v=21VTEv3vL7o

这是全function条码扫描function的NPAPI实施。 https://code.google.com/p/npapi-barcode-scanner-sample/wiki/usage

您也可以使用NPAPI做信用卡。

对于POS应用,您需要快速响应浏览器,javascript,AJAX,websocket(可能) https://www.youtube.com/watch?v=cg61WvIqVJc

最好的问候,黄先生

jack.wong@zetakey.com

Interesting Posts