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


67

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

该模型的效率很低,主要是通过更新。我正在研究通过Web与这些外围设备通信的其他方式,最好是通过Web浏览器。据我所知,Java是可以通过Applet完成我们正在寻找的功能的仅有的技术之一,我认为Adobe Flash也可以(通过Air平台)完成。这些是可行的,但不是可取的,因为我们想在支持Web的移动设备上运行我们的软件。

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


您对它的支持有什么要求?例如,它只能在一种浏览器的最新版本上运行,还是需要与IE的旧版本兼容?
LoveAndCoding 2012年

我们要决定客户端使用什么浏览器。Chrome会是理想的选择,因为每个主要平台(Windows,Linux,iOS等)都有适用的Chromium构建。
Daniel Szabo 2012年

一些组织不允许在其系统上使用Adobe软件。我知道有两个拥有这项政策的美国联邦机构和几家私营公司。Adobe具有编写世界上最不安全的软件的可疑之处。
jww

Answers:


86

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有关的公司都在努力使Web应用程序与本地应用程序一样强大。

但是您正在寻找的API仍在开发中,并且还有很长的路要走。对于您的特定情况,以及将您的Web应用连接到大多数设备的更一般的情况,我们距离可以使用的东西还有几年的距离。如果您想查看该字段中即将发生的令人敬畏的事情,以下是一些可以直接为您提供帮助的项目:

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

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

但是,Chrome小组的成员似乎已经决定深入研究并开始致力于这些工作,并将其发布到浏览器中。这导致我们...

WebUSB和Web蓝牙

像香肠一样,最好不知道网络标准的制定方法-
亚伯拉罕·林肯(可能)

在这方面有一些嗡嗡声,因为Chrome小组似乎将这些作为实验性功能,并开发了自己的规范。太好了!只是可能不是您希望的那样。

每个浏览器供应商和W3C贡献者组都有自己的风格,并以自己的方式对规范做出贡献。结果通常是浏览器已经同意的相当不错的规范。但是,从无到有变成了……混乱。真乱。很多时候是一个相当大的过程。它并不总是能带来良好的规格(是的,我在说的是您对Florian的妥协...),但是即使这样做,也需要一段时间。

但是,似乎Google完全是自己开发了此版本的规范。而且,以我的经验,Google遵循规范的方法总是有点...好吧...撇开我的个人观点,我们会说“ gung-ho”。他们倾向于潜入深渊。这似乎就是他们在这里所做的。

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

也就是说,这实际上很好。在这种情况下,Google经常做的一件事(不管是好是坏)是强迫对话,并且可以推动事情发展。而且,浏览器中附带的功能(甚至是实验功能)也可以提高对它的需求。因此,我们可能很快会在这方面看到更多进展。

电话间隙Apache Cordova。你知道,为你的手机

状态:功能不全,仅手机

Apache Cordova(以前称为Adobe PhoneGap)是一种用HTML,CSS和JS编写程序的方法,该方法使您可以访问电话等设备上的较低级功能,并可以跨设备进行编译。这将是实现您的程序的一种方式,但是它将是电话应用程序,不一定是桌面应用程序。一个可以考虑的选项,我想我会提到的一些东西。

科尔多瓦已经实现了上述一些功能,但是没有像NFC或蓝牙那样更强大的功能。

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

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

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

太快了!

状态:即将死/已死,无法作为网络应用程序

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

节点JS

状态:可能会有些痛苦,并且只能作为桌面应用程序使用

在过去的几年中,NodeJS和JS应用程序一直是一个热门话题。我没有在原始帖子中讨论它,因为我感觉它还不存在。但是,事情已经取得了进展,并且更容易为这种事情做好准备,并且拥有不断增长的用户基础的支持和力量。就是说,对于您的特殊情况,我不建议您使用它。它必须在用户计算机上是本地的,并且由于当前NodeJS(和类似的引擎)的状况,它将需要大量额外的配置和设置,这会使事情变得有些复杂。

因此,您可以使用带有NodeJS或类似引擎的HTML,CSS和JS来构建应用程序,并且可以低级访问所需的内容,但是它必须是本地的,并且比我确定要完成的工作要多您想为客户安装它的时间。

...现在我在哪里?

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

更多阅读:



1
看来Electron为此很好。我没有详细介绍它,但它似乎是一个跨平台的HTML5应用程序构建工具,支持所有的node.js功能。这样可以为多个平台创建单个可执行文件,从而解决所有“打包”难题。
gbe

12

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


嗯..那我该如何促进网络浏览器和信用卡阅读器之间的通信?
丹尼尔·萨博

你不会的 您将与用C ++编写的服务器进行通信,该服务器与Web浏览器进行通信。但是,C ++可以与信用卡读取器对话。
bobbybee,2012年

1
这就是我们进行基于浏览器的TWAIN扫描的方式。您必须安装本地应用程序或服务,该应用程序或服务必须使用可以与您要通话的设备进行通信的语言编写。然后,该应用程序(例如)在localhost的端口上运行HTTP,HTTPS,WS或WSS服务器,您的本地js可以与之通信。
Spike0xff

@ Spike0xff祝您的项目好运:)
bobbybee

5

现在可以使用WebUSB API来实现。

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

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


1

我最近一直在考虑这个问题……有一个主要用VB6编写的POS应用程序,考虑下一步该怎么做。HTML5是一个选项,我当时想使用VSPE将串行内容放入JS。

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

爱这个产品!对于在需要的地方获得串行通信非常有效,因此,我认为它会很好运行,至少作为一种概念验证可以使您继续前进。您将要结合使用“连接器”类型和“ tcpclient”和“ tcpserver”。


1

仅作记录,一种在2016年有效的方法(自chrome 26起),但在未来两年内将被撤消,是将html5部署为chrome应用程序,并使用chrome.usb(或chrome.serial或chrome)。蓝牙)。

我目前正在使用chrome.usb,并计划使用WebUSB API迁移到Web应用程序(请参阅Supersharp的回答),我希望在Google停止使用chrome应用程序🤞时会采用该应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.