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

时间:2012-10-22 23:56:55

标签: html5 peripherals

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

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

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

5 个答案:

答案 0 :(得分:83)

更新(2019年1月16日): Credential Management API已经公布。这是currently only supported on Chrome and Opera,但看起来很有希望。 Google Developers撰写了an article详细说明规范。

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

更新(2014年11月3日):自原始帖子发布以来已经过去了两年多,但答案现在基本保持不变。但是,我们在几个方面更接近你原来的目标。

原始答案:

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

背景

HTML5规范已进入"建议书"州。这意味着HTML5几乎就是它的外观。但是,我将使用HTML5,就像世界上每个营销人员都认为最好的一样。也就是说,我不会谈论HTML。好吧,我会,你将从HTML页面中使用它,但不是真的。我实际上要讨论的是JavaScript(JS)和that's a horse of a different color。但是出于所有意图和目的,我们将它全部置于与HTML5相同的标题下,HTML5已经被认为意味着"闪亮和新的"现在

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

完整设备API

状态:传入但未准备好

能够从浏览器访问设备正在缓慢而稳定地进行。目前,许多现代浏览器都可以访问一些更常见的设备,如the cameragamepads,但它们都是高级API。 Browser vendorsthe standards groups以及许多与网络有关的公司都试图使网络应用程序与本地应用程序一样强大。

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

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

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

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

WebUSB& Web BlueTooth

  

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

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

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

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

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

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

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

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

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

Cordova已经实现了上述一些功能,但没有一些功能更强大的功能,如NFC或BlueTooth。

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

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

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

它是如此Flash-y!

状态:死亡/死亡,无法作为网络应用

Flash无法通过网络直接访问系统。您可以创建一个AIR应用程序,但这会使基于Web的目的失败。此外,移动设备和网络上的Flash支持似乎正在下降。

的NodeJS

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

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

因此,您可以使用带有NodeJS或类似引擎的HTML,CSS和JS构建应用程序,并且可以对您需要的内容进行低级访问,但它必须是本地的,并且需要更多的工作而不是我确定您希望每次为客户安装时都这样做。

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

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

更多阅读:

答案 1 :(得分:9)

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

答案 2 :(得分:4)

现在可以使用WebUSB API实现。

从版本54开始是available in Chrome

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

答案 3 :(得分:1)

我最近一直在考虑这个问题...有一个主要用VB6编写的POS应用程序,考虑下一步该做什么。 HTML5是一个选项,我以为我会使用VSPE将串行内容输入JS。

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

喜欢这个产品!非常适合在需要的地方获取串行流量,所以我认为它会很好用,至少可以作为一个概念验证来帮助你。您将要使用“连接器”类型以及“tcpclient”和“tcpserver”的组合。

答案 4 :(得分:0)

仅仅是为了记录,一种在2016年运行良好的方法(自Chrome 26开始),但withdrawn over the next 2 years是将html5部署为Chrome应用并使用chrome.usb(或chrome。 serial或chrome.bluetooth)。

我目前正在使用chrome.usb并计划使用WebUSB API迁移到网络应用程序(请参阅Supersharp的回答),我希望在谷歌停止使用Chrome应用程序时将采用该应用程序。