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是您列出的稳定选项,但显然有其自身的缺点。随着网络的发展,我认为我们会从新功能中看到很多非常酷的东西,但是我们还有很长的路要走。
更多阅读: