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

Dan*_*abo 65 peripherals html5

我的公司编写安装在客户端计算机上的软件来执行销售点交易.该软件可与各种外围设备(收据打印机,条形码扫描仪,信用卡读卡器等)连接.我们使用Microsoft OPOS库在Visual Studio中创建的WinForms应用程序执行此操作,后者又与我们的云服务器(客户端 - 服务器模型)进行通信.

该模型明显效率低下,主要是更新.我正在研究通过网络与这些外围设备进行通信的其他方式,最好是通过网络浏览器.据我所知,Java是唯一可以做我们正在寻找的技术之一(通过applet),我也认为Adobe Flash也可以(通过Air平台).这些是可行的,但不是优选的,因为我们希望在支持Web的移动设备上运行我们的软件.

有没有人建议通过网络与外围设备进行通信的其他方式?

Lov*_*ing 84

UPDATE(2019年1月16日):凭证管理API已经公布.它目前仅支持Chrome和Opera,但它看起来很有前途.Google Developers撰写了一篇详细阐述该规范的文章.

更新(2016年12月28日):又过了几年,另一次更新.这个将更加关注两个新的发展,而不是其他任何事情.请参阅"完整设备API"下的新"WebUSB和Web蓝牙"部分.但答案仍然是一样的.

更新(2014年11月3日):距离最初的帖子已经过去了两年多,但答案现在基本保持不变.但是,我们在几个方面更接近您的原始目标.

原始答案:

有很多方法可以解决这个问题.

背景

HTML5规范已进入"推荐"状态.这意味着HTML5几乎就是它的外观.但是,我将使用HTML5,就像世界上每个营销人员都认为最好的一样.也就是说,我不会谈论HTML.好吧,我会,你将从HTML页面中使用它,但不是真的.我真正要讨论的是JavaScript(JS),这是一匹不同颜色的马.但是出于所有意图和目的,我们将它们全部置于与HTML5相同的标题下,HTML5现在被认为意味着"闪亮和新颖".

此外,我正在讨论的项目将有所不同.有些是非常依赖浏览器的项目(比如Chromium特定的实现),有些是更多标准驱动的项目,可能没有浏览器实现或试验它们.我会尝试区分这两者.

完整的设备API

状态:传入,但尚未准备好

能够从浏览器访问设备正在缓慢但稳定地进行.现在,许多现代浏览器可以访问一些更常见的设备,如相机游戏手柄,但它们都是高级API.浏览器供应商,标准组织以及许多参与网络的公司都试图使Web应用程序与本地应用程序一样强大.

但是您正在寻找的API仍在进行中并且还有很长的路要走.对于您的特定情况,以及将您的webapp连接到大多数设备的更一般情况,我们距离我们可以使用的东西还有几年的时间.如果你想看看该领域出现了什么令人敬畏的事情,这里只是一些可以直接帮助你的项目:

  • Web近场通信(NFC)API
    不幸的是,这个可能已经死在水中.但看起来最初W3C的一些人(主要是英特尔看起来像)正在考虑在网络上添加NFC API.
  • 媒体捕获流
    WebRTC小组正致力于对像摄像机这样的媒体流进行编程访问,这样可以集成条形码扫描或其他功能.这已经达到了CR状态,并且可以在浏览器中使用,但它本身就没那么有用.
  • Web蓝牙
    如果您有支持蓝牙功能的工具,此API将帮助您从能够收听和连接的计算机和设备连接它们.目前的主要驱动力似乎是Chrome团队,包括实验性实施,但我不认为它在任何地方都可以使用(参见"WebUSB和Web蓝牙"部分).
  • WebUSB
    这将允许完全访问低级USB信息,包括列出设备并与之交互.与Web BlueTooth相同,这似乎是当前的Chrome宠物项目,但我也不会依赖它(参见"WebUSB和Web蓝牙"部分).
  • 网络服务发现
    如果您在网络上有其他广播和使用HTTP的设备或项目,则此API将允许您发现这些服务并与之交互.没有浏览器实现,但它正处于W3C的工作草案中.

最初,由于Boot2Gecko(或Firefox OS),Mozilla正在推动其中的一些进展.然而,随着该项目的正式取消,我们现在在这些领域并没有看到他们取得多大进展.

然而,Chrome团队的成员似乎决定潜入并开始不仅努力实现这些目标,而是将其置于浏览器中.这导致我们......

WebUSB和Web BlueTooth

像香肠一样,最好不要知道Web标准是如何制作的
--Abraham Lincoln(可能)

在这个领域有一点点嗡嗡声,因为看起来Chrome团队将这些作为实验性功能隐藏起来,并为它开发了自己的规范.哪个好极了!可能不是你希望的方式.

每个浏览器供应商和W3C贡献者组都有自己的风格,并以自己的方式为规范做出贡献.结果通常是浏览器已经同意的相当不错的规范.但是,从无到有,到处都是......凌乱.真的很乱.并且很多次都是一个过程.它并不总能产生一个好的规范(是的,我在谈论弗洛里安的妥协......)但即使它确实如此,也需要一段时间.

然而,似乎谷歌自己开发了这个版本的规范.而且,根据我的经验,Google对规范的处理方式总是有点......好吧......把我的个人观点放在一边我们会说"gung-ho".他们倾向于直接潜入深渊.这似乎是他们在这里所做的.

我非常怀疑这些规范或实现在它们成为标准时会看起来像这样.这并没有错.这是这个过程的一部分.但我不会依赖此实现或针对它开发任何代码或产品.这是网络上前所未有的功能,所有浏览器供应商都希望在这方面有很大的发言权.

那就是说,这实际上是好的.谷歌经常做的事情之一(无论好坏)在这种情况下强迫对话,它可以推动事情发展.并且在浏览器中提供了一项功能,即使是实验性功能,也可以满足对它的需求.所以我们很快就会看到这个领域取得更多进展.

PhoneGap的Apache Cordova.你知道,对于你的手机

状态:功能不全,仅限电话

Apache的科尔多瓦,以前的Adobe PhoneGap的,是写你的HTML,CSS,JS和程序,可以让你的东西进入下级功能,例如电话和跨设备编译的方式.这是执行程序的方式,但它是一个手机应用程序,未必是桌面之一.一个可以考虑的选项,我想我会提到的.

科尔多瓦实现了几个已经上述功能,但不具备一些较有实力的像NFC或蓝牙.

Native-App解决方案(适用于Windows 8)

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

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

它是如此Flash-y!

状态:死亡/死亡,不可能作为网络应用程序

Flash无法通过网络直接访问系统.你可以创建一个AIR应用程序,但将那种战胜它基于网络的有目的.此外,移动设备上的Flash支持似乎正在下降.

的NodeJS

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

NodeJS和JS应用程序在过去几年中一直是一个热门话题.我没有在原帖中讨论它,因为我觉得它还没有完全存在.然而,事情已经取得了进展,并且更接近为这种事做好准备,并且拥有不断增长的用户群的支持和力量.也就是说,对于您的具体情况,我不建议使用它.它必须是用户机器上的本地,并且由于NodeJS(和类似引擎)目前的方式,它需要大量额外的配置和设置,这会使事情变得复杂.

所以,你可以使用HTML,CSS和JS用或的NodeJS类似引擎建立一个应用程序,并有你所需要的低级别的访问,但它必须是本地的,并且它会采取更多的工作比我敢肯定,你想要做的每您希望为客户安装它的时间.

......现在我在哪儿?

那么我们离开了哪里呢?好吧,简单:如果你想要一种语言/一组代码作为你的代码库,HTML/CSS/JS不是一个很好的选择...... 但有一天他们可能会.目前,您的选择仅限于您认为最适合您的客户的选择.Java是您列出的稳定选项,但显然有其自身的缺点.随着网络的发展,我认为我们会看到很多非常酷的东西来自新功能,但我们还有很长的路要走.

更多阅读:


bob*_*bee 10

这是可能的,但必须间接完成.理论上,您可以用低级语言编写套接字服务器,它获取I/O,并通过套接字发送I/O(我猜中继).HTML5使用WebSockets或一些等效的与此套接字服务器通信.


Sup*_*arp 5

现在可以通过WebUSB API来实现。

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

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