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



我的公司编写的软件安装在客户端机器上以执行销售点交易。该软件与各种外部外围设备(收据打印机、条形码扫描仪、信用卡阅读器等)接口。我们使用我们在Visual Studio中使用Microsoft OPOS库创建的WinForms应用程序来实现这一点,该应用程序反过来与我们的云服务器通信。

该模型存在明显的低效性,主要是在更新方面。我正在研究通过网络与这些外围设备通信的其他方式,最好是通过网络浏览器。据我所知,Java是唯一可以(通过小程序)实现我们所需功能的技术之一,我认为Adobe Flash也可以(通过Air平台)。这些是可行的,但并不可取,因为我们希望在支持网络的移动设备上运行我们的软件。

有人对通过网络与外部外围设备进行通信的其他方式有什么建议吗?

更新(2019年1月16日):凭证管理API已经发布。它目前只在Chrome和Opera上受支持,但看起来很有前景。谷歌开发者写了一篇文章详细阐述了规范

更新(2016年12月28日):又过了几年,又更新了一次。这一次将更多地关注两个新的发展,而不是其他任何事情。参见新的";WebUSB&Web蓝牙";根据";完整设备API";。但答案仍然是一样的。

更新(2014年11月3日):最初的帖子发布才两年多,但现在的答案基本不变。然而,我们在几个方面更接近您最初的目标。

原始答案:

要做到这一点,有很多方法。

背景

HTML5规范已经进入";建议";状态这意味着HTML5基本上是为它的外观设置的。然而,我将以世界上每个营销人员都认为最好的方式使用HTML5。也就是说,我不会谈论HTML。好吧,我会的,就你将从HTML页面使用它而言,但不是真的。我实际要讨论的是JavaScript(JS),这是一匹不同颜色的马。但出于所有意图和目的,我们将其放在与HTML5相同的标题下,HTML5的意思是";闪亮而崭新的";现在

此外,我正在讨论的项目在支持方面也会有所不同。有些是非常依赖于浏览器的项目(如Chromium特定的实现),有些是更标准驱动的项目,可能还没有浏览器实现或试验它们。我边走边试着把两者区别开来。

完整设备API

状态:传入,但尚未就绪

能够从浏览器访问设备正在取得缓慢但稳定的进展。现在,许多现代浏览器都可以访问一些更常见的设备,如相机或游戏板,但它们都是高级API。浏览器供应商、标准组织和许多参与网络的公司都在努力使网络应用程序与本地应用程序一样强大。

但您正在寻找的API仍在进行中,还有一段路要走。对于您的特定情况,以及将您的网络应用程序连接到大多数设备的更常见情况,我们离我们可以使用的东西还有几年的时间。如果你想看看这个领域会出现什么了不起的事情,这里有一些可以直接帮助你的项目:

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

最初,Mozilla因为Boot2Gecko(或Firefox OS)而推动了许多这样的项目。然而,随着该项目被正式取消,我们现在看不到他们在这些领域取得多大进展。

然而,Chrome团队的成员似乎已经决定深入研究,不仅开始朝着这些方向努力,而且将它们实时应用于浏览器中。这就引出了…

WebUSB&Web蓝牙

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

这个领域有点热,因为Chrome团队似乎偷偷地将这些功能作为实验功能,并为其开发了自己的规范。这太棒了!只是也许不是你所希望的那样。

每个浏览器供应商和W3C贡献者小组都有自己的风格,并以自己的方式为规范做出贡献。结果是通常是浏览器一致同意的一个相当不错的规范。但从一无所有到有所成就是…混乱的。真是一团糟。很多时候这是一个相当大的过程。它并不总是能产生一个好的规范(是的,我说的是你的Florian妥协…),但即使是这样,也需要一段时间。

然而,谷歌似乎完全是自己开发了这个版本的规范。而且,根据我的经验,谷歌对规格的处理方式总是有点。。。好抛开我的个人观点不谈,我们会说";gung-ho";。他们倾向于直接潜入深水区。这似乎就是他们在这里所做的。

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

也就是说,这其实很好。谷歌在这种情况下经常做的一件事(无论好坏)是强迫对话,它可以推动事情向前发展。在浏览器中提供一个功能,甚至是一个实验性功能,都会增加对它的需求。因此,我们可能很快就会看到这方面的更多进展。

PhoneGapApache Cordova。你知道,为了你的手机

状态:功能不全,仅限手机

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

Cordova已经实现了上面的一些功能,但没有像NFC或蓝牙这样更强大的功能。

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

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

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

太炫了

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

Flash无法通过网络直接访问系统。您可以创建一个AIR应用程序,但这将有点违背使其基于web的目的。此外,Flash在手机和网络上的支持似乎正在下降。

NodeJS

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

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

因此,你可以使用HTML、CSS和JS以及NodeJS或类似的引擎构建一个应用程序,并可以低级别访问你需要的内容,但它必须是本地的,而且每次你想为客户安装它时,它需要做的工作比我确信的要多。

现在我在哪里

那我们该何去何从呢?很简单:如果你想要一种语言/一组代码作为你的代码库,HTML/CSS/JS不是一个很好的选择。。。然而但总有一天会发生。目前,您的选择仅限于您认为对客户最有利的内容。Java是您列出的一个稳定的选项,但显然也有其自身的缺点。随着网络的发展,我想我们会看到新功能带来很多非常酷的东西,但我们还有很多路要走。

更多阅读:

  • 布莱恩。IO:超越HTML5
  • Windows 8上的HTML5应用程序
  • 维基百科使用JS构建的项目列表

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

现在可以通过WebUSB API实现。

自第54版起,它在Chrome中可用。

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

我最近想了很多。。。有一个主要用VB6编写的POS应用程序,考虑下一步该怎么做。HTML5是一个选项,我想我应该使用VSPE将串行内容放入JS中。

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

喜欢这个产品!它非常适合在你需要的地方获得串行流量,所以我认为它会很好地工作,至少作为一个概念证明,让你继续前进。您将希望使用"连接器"类型以及"tcpclient"one_answers"tcpserver"的组合。

记录在案,一种在2016年运行良好(自chrome 26以来)但将在未来两年内退出的方法是将您的html5部署为chrome应用程序并使用chrome.usb(或chrome.serial或chrome.bluetooth)。

我目前正在使用chrome.usb,并计划迁移到使用WebUSB API的网络应用程序(见Supersharp的回答),我希望在谷歌停止使用chrome应用程序时会采用这一点🤞.

最新更新