更新(2019 年 1 月 16 日): The 凭证管理API https://developer.mozilla.org/en-US/docs/Web/API/Credential_Management_API#Browser_compatibility已宣布。它是目前仅支持 Chrome 和 Opera https://caniuse.com/#feat=credential-management但它看起来很有希望。谷歌开发者写道一篇文章 https://developers.google.com/web/fundamentals/security/credential-management/详细说明规范。
更新(2016 年 12 月 28 日):又过了几年,又更新了。这一次将更关注两项新的发展。请参阅“完整设备 API”下的新“WebUSB 和 Web 蓝牙”部分。但答案仍然是一样的。
更新(2014 年 11 月 3 日):距离最初的帖子发表已经过去两年多了,但目前答案基本保持不变。然而,我们在几个方面更接近您最初的目标。
原答案:
有很多方法可以解决这个问题。
背景
HTML5规范已进入“推荐”状态。这意味着 HTML5 已经基本确定了它的样子。然而,我将按照世界上每个营销人员认为最好的方式使用 HTML5。也就是说,我不会谈论 HTML。好吧,只要您能从 HTML 页面使用它,我就会这么做,但实际上并非如此。我实际上要讨论的是 JavaScript (JS) 和那是一匹不同颜色的马 http://en.wikipedia.org/wiki/ECMAScript#History。但出于所有意图和目的,我们将其全部放在与 HTML5 相同的标题下,现在 HTML5 的意思是“闪亮而新颖”。
此外,我正在讨论的项目的支持也会有所不同。有些是非常依赖于浏览器的项目(例如 Chromium 特定实现),有些是更多标准驱动的项目,可能还没有浏览器实现或试验它们。我将在接下来的过程中尝试区分这两者。
完整的设备API
状态:正在接收,但尚未准备好
能够从浏览器访问设备正在取得缓慢但稳定的进展。现在,许多现代浏览器可以访问一些更常见的设备,例如相机 https://developer.mozilla.org/en-US/docs/Web/Guide/API/WebRTC or gamepads https://developer.mozilla.org/en-US/docs/Web/API/Gamepad,但它们都是高级 API。浏览器厂商 https://wiki.mozilla.org/WebAPI, 标准组 http://www.w3.org/2009/dap/,许多涉及网络的公司都在努力使网络应用程序与本地应用程序一样强大。
但您正在寻找的 API 仍在开发中,而且还有很长的路要走。对于您的特定情况,以及将您的网络应用程序连接到大多数设备的更一般情况,我们距离可以使用的东西还需要几年的时间。如果您想了解该领域即将出现哪些令人惊叹的事情,以下是一些可以直接帮助您的精选项目:
-
网络近场通信 (NFC) API http://www.w3.org/TR/2014/WD-nfc-20140114/
不幸的是,这个人现在可能已经死在水里了。但看起来最初 W3C 的一些人(看起来主要是英特尔)正在考虑向网络添加 NFC API。
-
媒体捕获流 http://www.w3.org/TR/2012/WD-mediacapture-streams-20120628/
WebRTC 小组正在致力于以编程方式访问相机等媒体流,这将允许集成条形码扫描或其他功能等功能。这已达到 CR 状态并且在浏览器中可用 http://caniuse.com/#feat=stream,但其本身的帮助较小。
-
网络蓝牙 https://webbluetoothcg.github.io/web-bluetooth/
如果您有支持蓝牙的工具,此 API 将帮助您从能够侦听和连接的计算机和设备与它们进行连接。目前主要的驱动因素似乎是 Chrome 团队,包括一个实验性的实现,但我不认为它可以在任何地方使用(请参阅“WebUSB 和 Web 蓝牙”部分)。
-
WebUSB https://wicg.github.io/webusb/
这将允许完全访问低级 USB 信息,包括列出设备并与它们交互。与 Web BlueTooth 相同,这似乎是当前的 Chrome 宠物项目,但我也不会依赖它(请参阅“WebUSB 和 Web BlueTooth”部分)。
-
网络服务发现 http://www.w3.org/TR/2014/WD-discovery-api-20140220/
如果网络上有其他广播和使用 HTTP 的设备或项目,则此 API 将允许您发现这些服务并与之交互。没有浏览器实现,但它在 W3C 的工作草案中。
最初,Mozilla 由于 Boot2Gecko(或 Firefox OS)而推动了其中的一些进展。然而,随着该项目正式取消,我们现在在这些领域看不到太多进展。
然而,Chrome 团队的成员似乎已经决定深入研究,不仅开始致力于这些工作,而且将它们放在浏览器中。这导致我们...
WebUSB 和网络蓝牙
就像香肠一样,最好不知道 Web 标准是如何制定的
——亚伯拉罕·林肯(可能)
这一领域引起了一些关注,因为 Chrome 团队似乎将这些作为实验性功能加入其中,并为其开发了自己的规范。这太棒了!只是可能不是以您希望的方式。
每个浏览器供应商和 W3C 贡献者团体都有自己的风格,并以自己的方式为规范做出贡献。结果是usually浏览器已经同意的相当不错的规范。但从无到有是……混乱的。真乱。很多时候这是一个相当过程。它并不总是能产生良好的规格(是的,我说的是你弗洛里安的妥协......)但即使它确实如此,也需要一段时间。
然而,谷歌似乎完全自己开发了这个版本的规范。而且,根据我的经验,谷歌对规范的态度总是有点......好吧......抛开我的个人意见,我们会说“热心”。他们往往会一头扎进深渊。这似乎就是他们在这里所做的。
我非常怀疑这些规范或实现在成为标准时会是什么样子。这并没有什么问题。这是过程的一部分。但我不会依赖此实现或开发任何针对它的代码或产品。这是网络上前所未有的功能,所有浏览器供应商都希望在这方面拥有很大的发言权。
也就是说,这实际上很好。在这种情况下,谷歌经常做的一件事(无论好坏)就是强制对话,它可以推动事情向前发展。在浏览器中提供一项功能,即使是实验性功能,也会增加对其需求的热度。因此,我们可能很快就会在这一领域看到更多进展。
PhoneGap Apache Cordova. You know, for your phone
状态:功能不全,仅限手机
阿帕奇科尔多瓦 http://incubator.apache.org/cordova/, 之前Adobe PhoneGap http://phonegap.com/,是一种用 HTML、CSS 和 JS 编写程序的方法,允许您访问手机等设备上的较低级别功能,并跨设备进行编译。这将是实现程序的一种方式,但它将是一个电话应用程序,不一定是桌面应用程序。一个值得考虑的选择,以及我想我会提到的一些事情。
Cordova 已经实现了上述一些功能,但没有一些更强大的功能,例如 NFC 或蓝牙。
本机应用程序解决方案(适用于 Windows 8)
状态:可能,但特定于操作系统和桌面应用程序
Windows 8 提供了用 HTML 和 JS 构建应用程序的能力。这将允许您通过以下方式轻松访问操作系统上的较低级别功能他们的API http://msdn.microsoft.com/en-us/library/windows/apps/br211377。从表面上看,它的范围相当广泛,你可以做很多事情。但是,您提到了跨操作系统支持,这显然将您限制在一种操作系统上。
真是太Flash了!
状态:正在死亡/死亡,不可能作为网络应用程序
Flash 无法通过网络直接访问系统。您可以创建一个 AIR 应用程序,但这会有点违背使其基于 Web 的目的。此外,移动设备和网络上的 Flash 支持似乎正在下降。
NodeJS
状态:可能有点麻烦,只能作为桌面应用程序
NodeJS 和 JS 应用程序在过去几年中一直是一个热门话题。我没有在原来的帖子中讨论它,因为我觉得它还没有完全实现。然而,事情已经取得了进展,它已经更接近为此类事情做好准备,并且拥有不断增长的用户群的支持和力量。也就是说,对于您的具体情况,我不建议使用它。它必须位于用户计算机的本地,并且由于 NodeJS(和类似的引擎)目前的情况,它需要大量额外的配置和设置,这会使事情变得有点复杂。
因此,您可以使用 HTML、CSS 和 JS 以及 NodeJS 或类似引擎构建一个应用程序,并且对您需要的内容具有低级别访问权限,但它必须是本地的,而且这需要比我确信您想做的更多工作您想为客户安装它的时间。
......现在我在哪里?
那么我们会怎样呢?嗯,很简单:如果您想要单一语言/代码集作为您的代码库,那么 HTML/CSS/JS 还不是一个很好的选择。但有一天他们可能会这么做。目前,您的选择仅限于您认为最适合客户的选择。 Java 是您列出的一个稳定的选项,但显然有其自身的缺点。随着网络的发展,我认为我们会看到新功能带来很多非常酷的东西,但我们还有很长的路要走。
更多阅读:
- Brian.IO:超越 HTML5 http://brian.io/slides/beyond-html5/
- Windows 8 上的 HTML5 应用 http://msdn.microsoft.com/en-us/library/windows/apps/br211385.aspx
- 维基百科使用 JS 构建的项目列表 http://en.wikipedia.org/wiki/JavaScript#Uses_outside_web_pages